【问题标题】:Python - compare two lists' values AND lengthsPython - 比较两个列表的值和长度
【发布时间】:2019-02-17 04:06:24
【问题描述】:

我有两个列表,list1list2。对于list1 中的每个值,我需要在list2 中找到满足以下两个条件的元素:

  • list1 元素必须是任何 list2 元素的子字符串(例如,list1 中的 'ABC' 是 list2 中的 'ABCDE' 的子字符串)

  • list1 元素的长度必须小于list2 元素的长度('ABC' 比 'ABCDE' 短)。

然后我想将list2 中的任何合格元素传递给单独的list3。我在绕过语法来实现这一点时遇到了很多麻烦。

这是我迄今为止尝试过的:

for elem in list1:
    if elem in list2 and len(elem) < len(range(list2)):
        list3.append(list2)

我意识到“len(range(list2))”是错误的,但它已经尽可能接近我认为正确的了。我不清楚如何“提取”符合条件的特定元素并将它们添加到我的列表中。

任何帮助将不胜感激:)

【问题讨论】:

  • 如果要求 list2 元素必须是子字符串,为什么还要比较长度?它需要更短才能成为子字符串
  • 请显示输入和预期输出。一个例子胜过一千个字……我的水晶球告诉我你需要all(len(elem) &lt; len(x) for x in list2)。或any...哦,好吧...不清楚
  • @Cut7er 子字符串不必比父字符串短:它可能相等。即'ABC''ABC' 的子字符串,但它不是 OP 的有效答案

标签: python list


【解决方案1】:

您可以使用列表推导:

list3 = [i for i in list1 if any(i in j and len(i) < len(j) for j in list2)]

例如,如果:

list1 = ['ABC', 'BCD', 'ABCDE', 'DEF']
list2 = ['ABCDE', 'XYZ']

那么使用上面的代码,list3 会变成:

['ABC', 'BCD']

【讨论】:

    【解决方案2】:
    list1 = ["ABC", "CD", "XX", "AA", "GG"]    
    list2 = ["BABCD", "CC", "XY", "AAA", "GG"]
    list3 = []
    for item in list1:
        for other_item in list2:
            if item in other_item and len(item) < len(other_item):
                list3.append(item)
    

    输出:

    >>> list3
    ['ABC', 'CD', 'AA']
    

    【讨论】:

      猜你喜欢
      • 2017-12-24
      • 2021-02-25
      • 2018-07-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-07
      相关资源
      最近更新 更多