【问题标题】:Using iteration and sets to rewrite lists (deleting entries based on condition)使用迭代和集合重写列表(根据条件删除条目)
【发布时间】:2017-04-17 21:43:52
【问题描述】:

如果任何子元素为空,我正在尝试删除列表中的元素(该列表目前维数为 7)。即给出这个更简单的示例列表:

'car','doug','' 
dede,eli,fred 
'law', '','frank' 
'','roger','w'
alex,berk,carl

在删除任何带有“空白”的行(或某个时间点的其他条件)之后

dede,eli,fred
alex,berk, carl

到目前为止,我已经为我的列表做了一些事情(它有效!),它有 7 个使用集合的元素

list1=[item for item in list1 if item [0]!= '']
list1=[item for item in list1 if item [1]!= '']
list1=[item for item in list1 if item [2]!= '']
list1=[item for item in list1 if item [3]!= '']
list1=[item for item in list1 if item [4]!= '']
list1=[item for item in list1 if item [5]!= '']
list1=[item for item in list1 if item [6]!= '']

我尝试过类似以下的操作。我不确定如何在这种情况下正确地将列表传递给函数 - 但这里 x 是一个列表

def empty(x):
    x=list(x)
    # the range should be updated to the column length here
    # i've left it at 7 for illustration
    for i in range(7):
        x=x[for item in x if item [i]!='']
    return x

【问题讨论】:

  • 试试[item for item in list1 if '' not in list1]
  • 谢谢-我现在就试试!

标签: python list python-3.x iteration


【解决方案1】:

使用一些python内置函数allfilter怎么样:

 x = [
    ['car','doug',''], 
    ['dede', 'eli', 'fred'], 
    ['law', '','frank'], 
    ['','roger','w'], 
    ['alex', 'berk' , 'carl']
]

# python 2.7
print filter(all, x)

# python 3.5
print(list(filter(all, x)))

- [['dede', 'eli', 'fred'], ['alex', 'berk', 'carl']]

过滤器评估一个谓词,只有当它为真时才返回它


如果迭代器中的所有项都为真,则所有返回真

【讨论】:

  • 我会试试的!确保我理解它 - all 函数返回一个“空”条目作为 false 虽然正确?
  • yes 在 python 中的空字符串被评估为 False:自己尝试一下:print(bool(''))
猜你喜欢
  • 2012-02-12
  • 2022-01-19
  • 1970-01-01
  • 2017-08-29
  • 1970-01-01
  • 2022-11-17
  • 2011-03-17
  • 2017-04-08
相关资源
最近更新 更多