假设我有很多名单。每个列表可能具有不同的长度。我想要做的是用(例如)字符串“EMPTY”完成每个列表。是否有内置函数或非常简单的命令集可以提供?
我认为2 for循环是可能的。
for list in lists:
for i in range(0,10):
try:
val = list[i]
except IndexError:
// list[i] = "EMPTY"
list.append("EMPTY")
每个使用Python的人都知道,Python有大量的小功能可以处理字符串,列表等...所以我的问题是是否有更简单的方法。
例如:
for list in lists:
list.complete("EMPTY",10)
答案 0 :(得分:2)
有很多方法。这是一个,但我不假装这是唯一的方法:
def complete(lst, fill_value, desired_length):
return lst + [fill_value] * (desired_length - len(lst))
如果你的fill_value
是可变的,例如列表或字典,那就不安全了,但字符串很好。
此外,它返回一个新列表,而不是编辑提供的列表。如果你想编辑它:
def complete(lst, fill_value, desired_length):
return lst.extend([fill_value] * (desired_length - len(lst)))
答案 1 :(得分:1)
for alist in lists:
alist.extend(["EMPTY"]*(10-len(alist))
可能吗?作为完成此任务的众多方法之一...
答案 2 :(得分:1)
我确定有很多方法可以做到这一点,但这是我首先想到的:
def complete_lists(lists, length, filler):
for lst in lists: #btw, don't use list as a variable name
lst.extend([filler for i in range(len(lst), length)])
你也可以在一个可怕的oneliner上做到这一点:
def complete_lists(lists, length, filler):
__ = [lst.extend([filler for i in range(len(l), length)]) for lst in lists]
答案 3 :(得分:0)
好吧也许有点短暂
n = 10
for l in lists:
l.extend((("EMPTY "*(n-len(l))).split())
答案 4 :(得分:0)
使用fillvalue
itertools.iziplongest
参数很容易做到这一点
首先导入必要的模块并创建数据:
>>> import pprint
>>> import itertools
>>> lists = (list('abc'), list('defg'), list('hijkl'))
>>> lists
(['a', 'b', 'c'], ['d', 'e', 'f', 'g'], ['h', 'i', 'j', 'k', 'l'])
现在,我们可以根据最长的列表对其进行压缩,并使用所需的填充值:
>>> pprint.pprint(list(itertools.izip_longest(*lists, fillvalue='EMPTY')))
[('a', 'd', 'h'),
('b', 'e', 'i'),
('c', 'f', 'j'),
('EMPTY', 'g', 'k'),
('EMPTY', 'EMPTY', 'l')]
最后,演示如何转置列表以获得所需的最终结果:
>>> pprint.pprint(list(zip(*itertools.izip_longest(*lists, fillvalue='EMPTY'))))
[('a', 'b', 'c', 'EMPTY', 'EMPTY'),
('d', 'e', 'f', 'g', 'EMPTY'),
('h', 'i', 'j', 'k', 'l')]
答案 5 :(得分:0)
您可能希望在列表中附加无而不是字符串。
例如,使用:
def completeList(lst):
while len(lst) < 10:
lst.append(None)
return lst
您可以执行以下操作:
for lst in lists:
lst = completeList(lst)
这会变成:
lists = [[1, 2, 4],
['one', 'two', 'three', 'four', 'five'],
['1', '2', '3', '4', '5', '6', '7', '8', '9', '10']]
分为:
Out: [[1, 2, 4, None, None, None, None, None, None, None],
['one', 'two', 'three', 'four', 'five', None, None, None, None, None],
['1', '2', '3', '4', '5', '6', '7', '8', '9', '10']]
使用无只会稍微提高效率,但可能会让您稍后在代码中对列表执行更直接的操作。例如,在字符串“EMPTY”不会的情况下,None将评估为false。