Python 删除列表中的空嵌套列表
具体代码见下文。基本上,我试图从csv文件中获取信息,并创建一个包含所有用户名的列(没有空格或重复项)的列表。我可以得到所有用户名的列表,但我找不到删除空白的方法。我试过两种过滤方法以及其他方法,但似乎都做不好。我的代码是: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
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中删除空列表、空元组和仅包含空列表的列表的方法。以下代码不会删除:
- 空嵌套元组(具有一个或多个级别)
- 具有两个以上级别的空嵌套列表
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中删除空列表、空元组和仅包含空列表的列表的方法。以下代码不会删除:
- 空嵌套元组(具有一个或多个级别)
- 具有两个以上级别的空嵌套列表
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字段仍然相关,但我只是测试了一个只显示用户名的方法(没有空格)。