【问题标题】:Split list item and remove split items if both are not contained in another list in Python如果两者都不包含在 Python 中的另一个列表中,则拆分列表项并删除拆分项
【发布时间】:2015-04-28 22:01:10
【问题描述】:

我有一个名为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,我知道这是不正确的。我该如何解决这个问题?提前感谢您的帮助。

【问题讨论】:

  • 变量nwk是文件还是列表?
  • 您可以分享您文件中的样本吗?
  • 我想说也包括输入和预期输出
  • 您需要更准确地定义您的问题。什么时候删除一行?当行中的任何一个值都不包含在整数列表中,或者两个值都不包含时?

标签: python list if-statement for-loop split


【解决方案1】:

filter是你的朋友:

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

不错的读物:

测试:

>>> 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']
>>>

【讨论】:

    【解决方案2】:

    如果您想删除该行,如果 a 中的两个 val 都在 vals 中,那么您可以将列表 a 与列表 val 进行比较,如 this answer 中所述 如果为真,则删除该行。

    像这样:

    set(['a', 'b']).issubset(['a', 'b', 'c'])
    

    使用集合是有意义的,因为它会删除列表中的所有双重条目。

    【讨论】:

      【解决方案3】:

      这是一个示例代码:

      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)
      

      【讨论】:

      • 这也是一个非常有帮助的回应。我能够使用“in”而不是“not in”并获得我想要的结果。感谢您的意见!
      【解决方案4】:

      您可以使用列表推导:

      [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]]
      

      【讨论】:

        猜你喜欢
        • 2017-10-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多