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_Python 3.x - Fatal编程技术网

Python 删除列表中的空嵌套列表

Python 删除列表中的空嵌套列表,python,list,python-3.x,Python,List,Python 3.x,具体代码见下文。基本上,我试图从csv文件中获取信息,并创建一个包含所有用户名的列(没有空格或重复项)的列表。我可以得到所有用户名的列表,但我找不到删除空白的方法。我试过两种过滤方法以及其他方法,但似乎都做不好。我的代码是: with open('test.csv') as f: reader = csv.DictReader(f) initialExport = [] for row in reader: iE = [row['Computer Name'], row['Usernam

具体代码见下文。基本上,我试图从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)

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

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

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

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]]
但是,如果只是弹出
计算机名
列,为什么要在第一位添加它呢?如果您只对一个元素感兴趣,为什么要创建嵌套列表:

finalExport = [row['Username'] for row in reader if row['Username']]

initialExport
是尝试筛选(单例)列表时的列表。其中一些列表可能包含空字符串。这并不意味着他们的名单是空的!所以他们的真实性无论如何都是真实的。您可以通过以下方式将其过滤掉:

finalExport =  [l for l in initialExport if l[0]]
但是,如果只是弹出
计算机名
列,为什么要在第一位添加它呢?如果您只对一个元素感兴趣,为什么要创建嵌套列表:

finalExport = [row['Username'] for row in reader if row['Username']]

这显示了一种从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)
输出:

[1, 2, '3', 'three', [1, 2, '3'], 4, [[1], []], 5, '6', (1, 2), 7, ((), ()), [[[]]]]

在上述示例中,从lst中删除了四个元素,即[]、[[]、[]、[]、[]、[]、[]和()。

这显示了从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)
输出:

[1, 2, '3', 'three', [1, 2, '3'], 4, [[1], []], 5, '6', (1, 2), 7, ((), ()), [[[]]]]
在上面的示例中,从lst中删除了四个元素,即[]、[]、[]、[]、[]、[]、[]、[]和()。

purge(list,[elements to purge])
将递归地从列表和任何子列表中清除
元素的所有副本,包括通过删除较深元素(
[[]、[]]创建的任何元素)
将被完全删除)。因为我们正在修改列表,所以每次删除元素时都必须在当前深度重新启动:

def purge(lst, bad):
    restart = True
    while restart:
        restart = False
        for index, ele in enumerate(lst[:]):
            if ele in bad:
                del lst[index]
                restart = True
                break
            elif isinstance(ele, list):
                purge(ele, bad)
                if lst[index] in bad:
                    del lst[index]
                    restart = True
                    break
示例:

>>> lst = [[[[], [[],[]]]]]
>>> purge(lst, [[]])
[]

>>> lst = [1, 2, "3", "three", [], [1, 2, "3"], [[], []], 4,
       [[1], []], [[], [], []], 5, "6", (1,2), 7, [[[]]]]
>>> purge(lst, [[]])
[1, 2, '3', 'three', [1, 2, '3'], 4, [[1]], 5, '6', (1, 2), 7]
>>> purge(lst, ['3'])
[1, 2, 'three', [1, 2], 4, [[1]], 5, '6', (1, 2), 7]
purge(list,[elements to purge])
将递归地从列表和任何子列表中清除
element
的所有副本,包括通过删除较深元素创建的任何元素(
[[[],[]]
将被完全删除)。因为我们正在修改列表,所以每次删除元素时都必须在当前深度重新启动:

def purge(lst, bad):
    restart = True
    while restart:
        restart = False
        for index, ele in enumerate(lst[:]):
            if ele in bad:
                del lst[index]
                restart = True
                break
            elif isinstance(ele, list):
                purge(ele, bad)
                if lst[index] in bad:
                    del lst[index]
                    restart = True
                    break
示例:

>>> lst = [[[[], [[],[]]]]]
>>> purge(lst, [[]])
[]

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

你想删除空白用户名或空白吗?你能发布一个输入正确和错误的示例吗?你想删除空白用户名或空白吗?你能发布一个输入正确和错误的示例吗?对不起,我应该解释一下-我将使用
计算机名
,但不在本例中。Computer Name字段仍然相关,但我只是测试了一个只显示用户名的方法(没有空格)。对不起,我应该解释一下-我将使用
Computer Name
,但在本例中不使用。computername字段仍然相关,但我只是测试了一个只显示用户名的方法(没有空格)。