zip()作用:将可迭代的对象
作为参数,将对象中对应的元素打包成一个个元组
,然后返回由这些元组组成的列表。如果各个迭代器的元素个数不一致,则返回列表长度与最短的对象相同。
>>> a = [1,2,3]
>>> b = [4,5,6]
>>> c = [4,5,6,7,8]
>>> zipped = zip(a,b) # 打包为元组的列表
[(1, 4), (2, 5), (3, 6)]
>>> zip(a,c) # 元素个数与最短的列表一致
[(1, 4), (2, 5), (3, 6)]
>>> zip(*zipped) # 与 zip 相反,可理解为解压,为zip的逆过程,可用于矩阵的转置
[(1, 2, 3), (4, 5, 6)]
set 是一个不允许内容重复的组合,而且set里的内容位置是随意的,所以不能用索引列出。可进行关系测试,删除重复数据,还可以计算交集、差集、并集等。
1、创建set集合
>>> set([1,2,3])
{1, 2, 3}
>>> set('123')
{'1', '2', '3'}
>>> set()
set() #创建一个空set
2、添加删除元素
python 集合的添加有两种常用方法,分别是add和update。集合add方法:是把要传入的元素做为一个整个添加到集合中
>>> a = set()
>>> a.add('python')
>>> a
{'python'}
>>> a.add('love')
>>> a
{'love', 'python'}
>>> a.add('i')
>>> a
{'love', 'i', 'python'}
集合update方法:是把要传入的元素拆分,做为个体传入到集合中
>>> a = set('love')
>>> a
{'l', 'v', 'o', 'e'}
>>> a.update('python')
>>> a
{'h', 'y', 'e', 'n', 'o', 'p', 't', 'l', 'v'}
集合删除操作方法:remove
>>> a = set(['i', 'love', 'python'])
>>> a
{'love', 'i', 'python'}
>>> a.remove('love')
>>> a
{'i', 'python'}
问题:编写一个函数来查找字符串数组中的最长公共前缀。如果不存在公共前缀,返回
空字符串 " "。
示例 1:
输入:strs = ["flower","flow","flight"]
输出:"fl"
示例 2:
输入:strs = ["dog","racecar","car"]
输出:" "
解释:输入不存在公共前缀。
答案:
法一:
class Solution:
def longestCommonPrefix(self, strs):
"""
:type strs: List[str]
:rtype: str
"""
res = ""
for tmp in zip(*strs):
tmp_set = set(tmp)
if len(tmp_set) == 1:
res += tmp[0]
else:
break
return res
法二:
class Solution:
def longestCommonPrefix(self, strs):
if not strs:
return ""
length = len(strs[0])
for i in range(length):
count = len(strs)
m = strs[0][i]
for j in range(1,count):
if i == len(strs[j]) or m != strs[j][i]:
return strs[0][:i]
return strs[0]
#更简洁写法:
class Solution:
def longestCommonPrefix(self, strs):
if not strs:
return ""
length, count = len(strs[0]),len(strs)
for i in range(length):
m = strs[0][i]
for j in range(1,count):
if i == len(strs[j]) or strs[j][i] != m:
return strs[0][:i]
return strs[0]