【问题标题】:Comparing lists and taking elements from one list that contain elements of other list比较列表并从一个列表中获取包含另一个列表元素的元素
【发布时间】:2017-08-08 18:22:04
【问题描述】:

我有两个列表,A 和 B。

A = ["string1", "string2"]
B = ["A string1 W", "B string4 Q", "HF string2 W]

我想找到一种方法来比较两个列表并从 B 中获取包含来自 A 的字符串的元素,并将这些元素放在另一个文本文件列表中。上面的例子会产生:

C = ["A string1 W", "HF string2 W"]

提前感谢您的帮助!

注意:问题最初涉及从文本文件中读取行,但由于该部分很简单,我选择将其删除。

【问题讨论】:

标签: python python-3.x list


【解决方案1】:

这很简单,坦率地说,一些额外的谷歌搜索应该可以让你到达那里。但是,您可以非常简洁地使用,

# read lines as a list
file_1_lines = open('/path/to/file1').readlines()
file_2_lines = open('/path/to/file2').readlines()

# get the containing lines with a list comp
file_2_lines_containing_1 = [file_2_lines[i] for i in range(len(file_2_lines)) if file_1_lines[i] in file_2_lines[i]]

# save
with open('/path/to/newfile') as f:
    json.dump(file_2_lines_containing_1,f)

如果您想要更简单的 for 循环实现,请发表评论。

【讨论】:

  • 我得到一个“file_2_lines_containing_1”的空列表 - 有什么可以添加到代码中以使其工作的吗?我知道问题不在于 A.txt 中的换行符,因为我删除了列表中的那些(对于 A.txt 中的字符串不在 B.txt 中的行尾的情况)。
  • 原始列表中可能有换行符。清理条目
  • 不,我确定我在“file_2_lines”中没有换行符,因为当我打印列表时我看不到换行符。我使用“file_2_lines = list(map(lambda s: s.strip(), file_2_lines))”删除换行符
  • 所以你所拥有的仍然对我不起作用,但我使用以下代码而不是那里的第六行并且它起作用了:“file_2_lines_containing_1 = [i for e in file_2_lines for i in file_1_lines如果 e 在 i]".
猜你喜欢
  • 2021-12-13
  • 2016-11-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-01
  • 2021-01-24
  • 1970-01-01
相关资源
最近更新 更多