【问题标题】:Compare variable number of list elements比较可变数量的列表元素
【发布时间】:2021-01-22 11:27:26
【问题描述】:

我有一个包含每个元素中的字符串的列表。我想比较从第一个字符开始到结尾的每个字符串的字符。循环遍历列表中最短字符串的长度。

例如:

strs = ["flower", "flow", "flight"]

比较看起来像这样:

for sub_i in range(len(min(strs, key=len))):
    if(strs[0][sub_i] == strs[1][sub_i] == strs[2][sub_i]):
        #do something

如何扩展它以便在strs 中有任意数量的元素? (而不是在我的示例中只有 3 个)

【问题讨论】:

  • 什么是“做某事”?比较流只有 4 个字符的第 5 个字符时会发生什么?
  • 为什么要逐个字符比较它们?
  • 我使用最短字符串的长度作为最大值进行迭代
  • 我想以这种方式比较它们以找到字符串中最长的前缀。在示例 strs 中,它是 fl.

标签: python string list for-loop


【解决方案1】:

对于任意长度,您可以zip() 字符串。这将使用最短字符串的长度自动迭代。然后确定所有字母是否相同。下面将其转换为set() 并检查长度(如果所有元素都相等,则为1),当然,还有其他方法:

strs = ["flower", "flow", "flight"]

for letters in zip(*strs):
    if len(set(letters)) == 1:
        # do something
        print(letters)

打印:

('f', 'f', 'f')
('l', 'l', 'l')

【讨论】:

    【解决方案2】:

    对于一些k

    len(set([s[:k] for s in strs])) == 1
    

    例子:

    strs = ["flower", "flow", "flight"]
    k = 2
    if len(set([s[:k] for s in strs])) == 1:
       # do something
      print ("same")
    

    输出:

    same
    

    【讨论】:

    • 感谢您的回复。对不起,我不明白这一点:[s[:k] for s in strs],你能详细说明一下吗?
    • s[:k] 为您提供字符串 s 的前 k 个字符。因此,我们正在制作一个包含 strs 中所有字符串的前 k 个字符的字符串列表,并通过 set 检查它们是否都匹配。
    • 抱歉,我不太明白。您如何从 for 循环创建列表?你怎么在for循环之前有这个s[:k]?有没有关于这个主题的文档或说明?
    • 它称为列表理解
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-21
    • 2023-04-03
    • 2015-09-30
    • 1970-01-01
    相关资源
    最近更新 更多