python中的zip()、map()、set()、enumerate()函数
1、python中的zip()函数:
**zip()**函数是将可以迭代的对象作为参数,将对象中的对应的元素打包成一个个元组,返回这些元组组成的列表。
例:
a = [1,2,3,4]
b = [2,3,4,5]
c = [4,1,3,6,7]
zip_1 = zip(a,b)
zip_2 = zip(a,c)
print(zip_1)
print(zip_2)
zip_1 的输出为[(1,2),(2,3),(3,4),(4,5)];zip_2的输出为[(1,4),(2,1),(3,3),(4,6)]。
所以可以看出zip()函数的两个特点:1、返回的结果是一个list,即zip_1 = list(zip(a,b))
。2、如果输入的list长度不相同,则按照最小长度的返回。
zip()函数中还有zip(*)的用法:
>>>a1,a2 = zip(*zip(a,b))
>>>a1 = [1,2,3,4]
>>>a2 = [2,3,4,5]
**zip(*)**的用法主要是返回数组形式。
nums = ['fllow','flower','frog']
for i in zip(*nums):
print(i)
('f', 'f', 'f')
('l', 'l', 'r')
('l', 'o', 'o')
('o', 'w', 'g')
2、python中的map()函数:
map() 会根据提供的函数对指定序列做映射。
第一个参数 function 以参数序列中的每一个元素调用 function 函数,返回包含每次 function 函数返回值的新列表。
map(function, iterable, ...)
map() 根据python的版本不同返回不同:
Python 2.x 返回列表。
Python 3.x 返回迭代器
>>>def square(x) : # 计算平方数
... return x ** 2
...
>>> map(square, [1,2,3,4,5]) # 计算列表各个元素的平方
[1, 4, 9, 16, 25]
>>> map(lambda x: x ** 2, [1, 2, 3, 4, 5]) # 使用 lambda 匿名函数
[1, 4, 9, 16, 25]
# 提供了两个列表,对相同位置的列表数据进行相加
>>> map(lambda x, y: x + y, [1, 3, 5, 7, 9], [2, 4, 6, 8, 10])
[3, 7, 11, 15, 19]
3、python中的set()函数:
set() 函数创建一个无序不重复元素集,可进行关系测试,删除重复数据,还可以计算交集、差集、并集等.
nums = ["fllow","flower","frog"]
ss = list(map(set,zip(*nums)))
print(ss)
[{'f'}, {'r', 'l'}, {'l', 'o'}, {'w', 'o', 'g'}]
因为删除了重复数据,所以如果想要找到公共前缀只需要寻找列表中长度为一的元素。同时,zip(*)函数,所以返回的值中只能检索到最小的列表长度。
4、python中enumerate()函数:
enumerate() 函数用于将一个可遍历的数据对象(如列表、元组或字符串)组合为一个索引序列,同时列出数据和数据下标,一般用在 for 循环当中。
enumerate(sequence, [start=0])
-
sequence – 一个序列、迭代器或其他支持迭代对象。
-
start – 下标起始位置。
>>>seasons = ['Spring', 'Summer', 'Fall', 'Winter'] >>>list(enumerate(seasons)) [(0, 'Spring'), (1, 'Summer'), (2, 'Fall'), (3, 'Winter')] >>>list(enumerate(seasons, start=1)) # 小标从 1 开始 [(1, 'Spring'), (2, 'Summer'), (3, 'Fall'), (4, 'Winter')]
题目来源:
查找字符串数组中的最长公共前缀 :
class Solution(object):
def longestCommonPrefix(self, strs):
"""
:type strs: List[str]
:rtype: str
"""
if not strs:
return ""
ss = list(map(set, zip(*strs)))
res = ""
for i, x in enumerate(ss):
x = list(x)
if len(x) > 1:
break
res = res + x[0]
return res