拆分列表项,如果这两个项目都不包含在Python中的另一个列表中,则删除拆分的项目

拆分列表项,如果这两个项目都不包含在Python中的另一个列表中,则删除拆分的项目,python,list,if-statement,for-loop,split,Python,List,If Statement,For Loop,Split,我有一个名为nwk的列表,每行有两个值。我想使用split()分隔每行的值,然后将这两个值与另一个名为vals的整数列表进行比较。如果nwk中一行中的两个值都不包含在vals中,我想从nwk中删除该行。以下是我到目前为止的情况: for line in nwk: a = [ (int(n) for n in line.split()) ] if a[0] not in vals: nwk.remove(line) else: if a[1]

我有一个名为
nwk
的列表,每行有两个值。我想使用
split()
分隔每行的值,然后将这两个值与另一个名为
vals
的整数列表进行比较。如果
nwk
中一行中的两个值都不包含在
vals
中,我想从
nwk
中删除该行。以下是我到目前为止的情况:

for line in nwk:
    a = [ (int(n) for n in line.split()) ]
    if a[0] not in vals:
        nwk.remove(line)
    else:
        if a[1] not in vals:
            nwk.remove(line)
        else:
            continue

然而,当我打印nwk时,代码只删除了我在nwk中的原始行的1/2,我知道这是不正确的。我怎样才能解决这个问题?提前感谢您的帮助。

如果您想删除该行(如果a中的两个VAL都在VAL中),则可以将列表a与列表VAL进行比较,如中所述 如果为True,则删除该行

像这样:

set(['a', 'b']).issubset(['a', 'b', 'c'])
使用集合是有意义的,因为它会删除列表中的所有双项。

以下是示例代码:

new_list = list()
for line in nwk:
    row_a, row_b = line.split()
    if (row_a not in vals) and (row_b not in vals):
        new_list.append(line)

您可以使用列表:

[row for row in nwk if row[0] in vals and row[1] in vals]
这将生成nwk的子集,其中第1列和第2列中的每个值都在val中

nwk = [[1, 2], [3, 4], [5, 6], [7, 8]]
vals = [1, 2, 5, 6, 8]

>>> [row for row in nwk if row[0] in vals and row[1] in vals]
[[1, 2], [5, 6]]

filter
是您的朋友:

filter(lambda line: any(elem in vals for elem in line.split()), nwk)
好读物:

  • Python语言参考»
  • Python语言参考»/
  • Python语言参考»
测试:


变量
nwk
是一个文件还是一个列表?你能分享你文件中的一个样本吗?我想说的是包括输入和预期输出。你需要更精确地定义你的问题。什么时候删除一条线?当整数列表中不包含行中的任何一个值,或者两个值都不包含时?这也是一个非常有用的响应。我能够使用“in”而不是“notin”,并得到我想要的结果。谢谢你的意见!
>>> nwk = ['1 2', '3 4', '5 6', '7 8']
>>> vals = ['1', '2', '5', '6', '8']
>>> list(filter(lambda line: any(elem in vals for elem in line.split()), nwk))
['1 2', '5 6', '7 8']
>>>