Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python:从列表中删除一项_Python_List - Fatal编程技术网

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。可能您想要的只是修改后的列表,因此必须先删除,然后打印。我不确定为什么会有否决票。答案比已接受的答案更清楚、更简洁。