Python:从列表中删除一项
我的数据如下所示:Python:从列表中删除一项,python,list,Python,List,我的数据如下所示: hashtags = [['mobile', 'data', 'cx', 'rt'], ['drivers', 'data', 'analytics'], ['data'], ['data', 'math']] print hashtags for list in hashtags: list.remove('data') if list == []: hashtags
hashtags = [['mobile', 'data', 'cx', 'rt'],
['drivers', 'data', 'analytics'],
['data'],
['data', 'math']]
print hashtags
for list in hashtags:
list.remove('data')
if list == []:
hashtags.remove(list)
我想从上面的列表中删除“数据”,以便预期输出为:
hashtags = [['mobile', 'cx', 'rt'],
['drivers', 'analytics'],
['math']]
我试过:
for item in hashtags:
print item.remove('data')
但是,代码返回:
None
None
None
None
有什么建议吗?函数
项。删除(…)
不返回值,它只是从列表中删除所述值。你应该这样做:
for sublist in hashtags:
sublist.remove('data')
hashtags.remove(["data"])
然后按如下方式打印列表:
hashtags = [['mobile', 'data', 'cx', 'rt'],
['drivers', 'data', 'analytics'],
['data'],
['data', 'math']]
print hashtags
for list in hashtags:
list.remove('data')
if list == []:
hashtags.remove(list)
使用
列表理解
>>> hashtags = [['mobile', 'data', 'cx', 'rt'],
['drivers', 'data', 'analytics'],
['data'],
['data', 'math']]
>>> [[j for j in i if j != 'data'] for i in hashtags]
[['mobile', 'cx', 'rt'], ['drivers', 'analytics'], [], ['math']]
>>> [k for k in [[j for j in i if j != 'data'] for i in hashtags] if len(k) > 0 ]
[['mobile', 'cx', 'rt'], ['drivers', 'analytics'], ['math']]
为了更好的可读性
>>> [lst for lst in [[itm for itm in sublst if itm != 'data'] for sublst in hashtags] if len(lst) > 0 ]
[['mobile', 'cx', 'rt'], ['drivers', 'analytics'], ['math']]
>>>
您可以获得如下所示的理想结果:
hashtags = [['mobile', 'data', 'cx', 'rt'],
['drivers', 'data', 'analytics'],
['data'],
['data', 'math']]
print hashtags
for list in hashtags:
list.remove('data')
if list == []:
hashtags.remove(list)
这不是OP想要的。OP希望从列表中完全删除项目
[“data”]
,而不是从[“data”]
中删除“data”
。列表理解过于繁琐,而且更难阅读和维护。虽然我认为如果使用适当的变量名,例如[[itm表示子列表中的itm,如果itm!=“数据”]表示哈希标记中的子列表]
为什么不只是表示列表中的itm
?我认为两者都提供了相同的功能。下面尚未解决的一个问题是,您通常不应该尝试使用list.append()和list.remove()的结果表达式。列表已更改,但除非操作失败,否则返回值为None。可能您想要的只是修改后的列表,因此必须先删除,然后打印。我不确定为什么会有否决票。答案比已接受的答案更清楚、更简洁。