删除lis中的空嵌套列表

2024-04-25 14:28:53 发布

您现在位置:Python中文网/ 问答频道 /正文

具体代码见下文。基本上,我试图从csv文件中获取信息,并创建一个包含所有用户名的列(没有空格或重复项)的列表。我可以得到所有用户名的列表,但我无法找到删除空白的方法。我试过滤镜和其他方法,但似乎不能正确。我的代码是:

with open('test.csv') as f:
reader = csv.DictReader(f)
initialExport = []
for row in reader:
    iE = [row['Computer Name'], row['Username']]
    initialExport.append(iE)

for i in initialExport:
    i.pop(0)
finalExport = filter(None, initialExport)
print(finalExport)

Tags: 文件csv方法代码in列表for用户名
3条回答

这显示了一种从lst中删除空列表、空元组和只包含空列表的列表的方法。以下代码不会删除:

  • 空嵌套元组(具有一个或多个级别)
  • 具有两个以上级别的空嵌套列表

讨论lst的最后两个条目。在

import collections

lst = [1, 2, "3", "three", [], [1, 2, "3"], [[], []], 4,
       [[1], []], [[], [], []], 5, "6", (1,2), 7, (),
       ((), ()), [[[]]]]

for index, item in enumerate(lst):
    # if it is an empty list [] or tuple ()
    if not item:
        del lst[index]
    # if it is a list containing only empty sublists [[], [], ...]
    elif isinstance(item, collections.MutableSequence):
        if not [i for sublist in item for i in sublist]:
            del lst[index]

print(lst)

输出:

^{pr2}$

在上例中,从lst中删除了四个元素,分别是[]、[[]、[]]、[[]、[]]和()。在

与其将其过滤掉,不如首先避免添加空白条目:

for row in reader:
    if row['Username']:
        iE = [row['Computer Name'], row['Username']]
        initialExport.append(iE)

initialExport是当您试图筛选(单例)列表时的列表。其中一些列表可能包含空字符串。这不会让他们成为空名单!所以不管怎样,他们的真实性都是真实的。您可以通过以下方式过滤掉:

finalExport =  [l for l in initialExport if l[0]]

但是,如果只弹出Computer Name列,为什么要在第一位置添加它呢?如果你对一个元素感兴趣,为什么要嵌套一个元素:

^{pr2}$

相关问题 更多 >