请参阅下面的确切代码。基本上,我试图从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)
答案 0 :(得分:1)
为什么不首先避免添加空白条目,而不是将其过滤掉:
for row in reader:
if row['Username']:
iE = [row['Computer Name'], row['Username']]
initialExport.append(iE)
答案 1 :(得分:1)
initialExport
是(单例)列表的列表。其中一些列表可能包含空字符串。这不会让他们成为空名单!所以无论如何,他们的真实性都是正确的。您可以通过以下方式过滤掉它们:
finalExport = [l for l in initialExport if l[0]]
但是,如果只是弹出它,为什么要首先添加Computer Name
列?如果您只对一个元素感兴趣,为什么要创建一个嵌套列表:
finalExport = [row['Username'] for row in reader if row['Username']]
答案 2 :(得分:0)
这显示了一种删除空列表,空元组和仅包含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中删除了四个元素,即[],[[],[]],[[],[],[]]和()。
答案 3 :(得分:0)
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]