1. zip 기능
zip() 함수는 list 또는 dict로 변환할 수 있는 zip 유형의 객체를 반환합니다.
#定义列表
a = [1, 2, 3]
b = [4, 5, 6]
# 打包为元组的列表,而且元素个数与最短的列表一致
a_b = zip(a, b)
# 输出zip函数的返回对象类型
print("a_b类型%s" % type(a_b)) # 输出:a_b类型<class 'zip'>
# 输出a_b
print(a_b) # 输出:<zip object at 0x000001F4FB05A440>,
# 返回了这个zip对象在内存中的存储位置
# 将a_b转换为list形式或dict形式可以观看数据
print(list(a_b)) # [(1, 4), (2, 5), (3, 6)]
# 或者转换为dict形式(此时不采取上述转换为list的操作)
print(dict(a_b)) # {1: 4, 2: 5, 3: 6}
2.zip(*압축) 기능
zip(*zipped)의 *zipped 매개변수는 목록 배열이거나 zip() 함수에 의해 반환된 객체일 수 있습니다.
예제 1: 2차원 목록의 세로 방향 합계 또는 평균
sheet=[[1,2,3],[4,5,6],[7,8,9],[10,11,12]]
for i in zip(*sheet):
print(i)
print(sum(i)/len(i))
# 输出:
# (1, 4, 7, 10) 此时len(i)=4
# 5.5
# (2, 5, 8, 11)
# 6.5
# (3, 6, 9, 12)
# 7.5
예제 2: 1차원 문자열 목록에 대한 연산
list1=['abcd','adks','ksc']
for x in zip(*list1):
print(x)
# 对每个单词依次取相应位置的字符组成一个元组tuple,当某个字符串结束时则停止
# 输出 ('a', 'a', 'k') ('b', 'd', 's') ('c', 'k', 'c')
3. 프로그래밍 질문: 가장 긴 공통 접두사(Likou 질문)
제목 설명: 한 줄에 공백으로 구분된 여러 개의 영숫자 문자열을 입력하십시오(문자열 사이에 다른 문자가 포함되지 않음 ) 이 문자열의 가장 긴 공통 접두어를 찾는 기능을 정의 하고 공통 접두어가 없으면 '를 출력합니다. 찾을 수 없음'
예: 입력: water waiter watt 출력: wa
암호:
def f(strs):
prefix = ''
for x in zip(*strs): # 每个单词依次取相对应位置的字符组合
if len(set(x)) == 1: # 若去重后长度为1则为共有前缀字符(集合set元素唯一,可以去除
# 重复元素。三个元素相同时,去重后集合长度为1)
prefix = prefix + x[0] # 将共有字符拼接到字符串上
else: # 若出现不同字符结束循环
break
if prefix: # 若字符串非空
return prefix # 返回共有前缀
else:
return 'NOT FOUND'
strs=list(input().split()) # 可以接收空格为间隔的所有元素构成列表
print(f(strs))
# 检验程序:
# 在python命令行输入:water waiter watt
# 则strs为:['water','waiter','watt']
# 最后一行输出:'wa'