使用python删除此列表中的无值[重复]

Posted

技术标签:

【中文标题】使用python删除此列表中的无值[重复]【英文标题】:Remove none values in this list using python [duplicate] 【发布时间】:2019-08-03 16:07:15 【问题描述】:

我想删除此列表中的 None 值

input= [(None, 'Ibrahimpatnam', 9440627084, None, 'Under Investigation'),
        (None, 'Ibrahimpatnam', 9440627084, None, 'Under Investigation')]

并得到类似的输出

['Ibrahimpatnam', 9440627084, 'Under Investigation', 'Ibrahimpatnam', 9440627084, 'Under Investigation']

【问题讨论】:

【参考方案1】:

您需要遍历列表(其中包含元组),然后遍历每个元组。检查每个元组的每个元素是否为None

a = [
    (None, "Ibrahimpatnam", 9_440_627_084, None, "Under Investigation"),
    (None, "Ibrahimpatnam", 9_440_627_084, None, "Under Investigation"),
]
b = [element for sub_tuple in a for element in sub_tuple if element is not None]
print(b)

你得到

['Ibrahimpatnam', 9440627084, '正在调查中', 'Ibrahimpatnam', 9440627084, '正在调查中']

【讨论】:

@Hayat 这就是 OP 要求的,不是吗? 是的..当然没看到。【参考方案2】:

试试这个:

input_= [(None, 'Ibrahimpatnam', 9440627084, None, 'Under Investigation'),
        (None, 'Ibrahimpatnam', 9440627084, None, 'Under Investigation')]
output = []
for each in input_:
    newList = list(filter(None,each))
    output = output+newList
print(output)

注意:不要使用input作为变量,它是python中的保留关键字。如果您刚刚在这篇文章中使用它,那也没关系。

【讨论】:

【参考方案3】:

如果你想剥离,那么连接——列表理解在这里工作得非常干净而不会失去可读性:

import itertools
stripped_lists = [ [x for x in sublist if x] for sublist in input_ ]

print(list(itertools.chain.from_iterable(stripped_lists )))

输出:

['Ibrahimpatnam', 9440627084, 'Under Investigation', 'Ibrahimpatnam', 9440627084, 'Under Investigation']

或者,如果你连接然后剥离,这很好而且很短:

print(list(x for x in itertools.chain.from_iterable(aa) if x))

【讨论】:

【参考方案4】:

首先,使用列表推导展平数据,然后使用filter() 方法过滤掉 None 值。 filter() 方法将返回一个过滤器对象。所以我们必须使用list() 方法将其转换回列表:

flat_input = [item for sublist in input for item in sublist]
output = list(filter(None, flat_input))

这是我能想到的最短的解决方案。希望对您有所帮助!

【讨论】:

【参考方案5】:

如果子列表项不是无则迭代列表然后子列表添加到新列表b

a = [
    (None, "Ibrahimpatnam", 9_440_627_084, None, "Under Investigation"),
    (None, "Ibrahimpatnam", 9_440_627_084, None, "Under Investigation"),
]
b=[]
for i in a:
    for j in i:
        if j:
            b.append(j)


print (b)

【讨论】:

以上是关于使用python删除此列表中的无值[重复]的主要内容,如果未能解决你的问题,请参考以下文章

可浏览 API 中的无值

python中的抓取显示无值[重复]

使用Apache-beam在Python中删除字典中的第一项[重复]

使用 Python 删除对象列表中的重复项

如何删除此列表中的重复元素?

Python统计列表中的重复项出现的次数