set()/zip()/zip(*)--相关内容-查找字符串数组中的最长公共前缀

本文详细介绍了Python内置函数zip()用于元素打包和解包的方法,以及set()集合的基本操作,如创建、添加删除元素和集合运算。重点展示了如何使用这两个函数解决查找字符串数组中最长公共前缀的问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、zip()相关内容

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 是一个不允许内容重复的组合,而且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]

参考:​​​​​​python set()函数讲解_勉旃的博客-优快云博客_python set

python中zip()与zip(*)的用法解析_Init1al-Z的博客-优快云博客_python zip(*)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值