【问题标题】:python list comprehension not working as expectedpython列表理解没有按预期工作
【发布时间】:2017-08-22 13:43:33
【问题描述】:

我是 python 列表理解的新手。我想将 for-if 语句转换为列表理解,但它没有按预期工作:

a = ['Done', 'add dns addRec test 11.11.11.11']
record = "addRec"

普通python代码:

list_new = []    
for member in a:
  if record and "addRec" in member:
    list_new.append(member)
    print(list_new)

我的列表理解:

list_new = [list_new.append(member) for member in a if record and "addRec" in member]

list_new 作为空列表返回。

它应该返回:

['add dns addRec test 11.11.11.11']

【问题讨论】:

  • 记录代表什么?
  • 编辑了问题。

标签: python-2.7 list list-comprehension


【解决方案1】:

试试这个:

list_new = [member for member in a if record and "addRec" in member]

请注意,.append() 函数不会返回任何内容。

【讨论】:

    【解决方案2】:

    comperhension 已经返回了一个列表,所以我认为 list_new.append(member) 是多余的。

    我在没有“记录”和附加部分的情况下复制了您的代码。它似乎正在工作:

    a = ['Done', 'add dns addRec test 11.11.11.11']
    list_new = []
    for member in a:
      if "addRec" in member:
        list_new.append(member)
        print(list_new)
    assert ['add dns addRec test 11.11.11.11'] == list_new
    
    #comperhension
    list_new = [member for member in a if "addRec" in member]
    print list_new
    assert ['add dns addRec test 11.11.11.11'] == list_new
    

    编辑(在问题编辑后添加“记录”):

    a = ['Done', 'add dns addRec test 11.11.11.11']
    record = "addRec"
    
    list_new = []
    for member in a:
      if record and "addRec" in member:
        list_new.append(member)
        print(list_new)
    assert ['add dns addRec test 11.11.11.11'] == list_new
    
    #comperhension
    list_new = [member for member in a if record and "addRec" in member]
    print list_new
    assert ['add dns addRec test 11.11.11.11'] == list_new
    

    【讨论】:

    • record 条件没有做任何事情,因为 record == "addRec" 和 truelike 一样。我不确定它最初是否有所不同,OP 是否想要if record in member and "addRec" in member:,但现在,它毫无意义。
    • 我同意,记录在问题中出现是无用的,但它可能只是其价值的一个例子。在任何情况下,我的答案都包含两种情况的解决方案(有或没有记录)
    猜你喜欢
    • 2022-06-22
    • 2019-06-22
    • 2012-05-09
    • 2014-02-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-23
    相关资源
    最近更新 更多