我有多个整数和字符串的列表
['-200', ' 0', ' 200', ' 400', ' green', '0', '0', '200', '400', ' yellow', '200', '0', '200', '400', ' red']
我很难将每个列表分开5 elements
并创建一个只有 5 个元素的新列表。
但是,我不想要 3 个不同的列表,我只想要一个在每次有新列表时都会更改的列表5 elements
。
你想要这样的东西:
composite_list = [my_list[x:x+5] for x in range(0, len(my_list),5)]
print (composite_list)
输出:
[['-200', ' 0', ' 200', ' 400', ' green'], ['0', '0', '200', '400', ' yellow'], ['200', '0', '200', '400', ' red']]
“新”5 个元素是什么意思?
如果要附加到此列表,可以执行以下操作:
composite_list.append(['200', '200', '200', '400', 'bluellow'])
你可以用一句话来做到这一点
>>> import math
>>> s = ['-200', ' 0', ' 200', ' 400', ' green', '0', '0', '200', '400', ' yellow', '200', '0', '200', '400', ' red']
>>> [s[5*i:5*i+5] for i in range(0,math.ceil(len(s)/5))]
那么输出应该是:
[['-200', ' 0', ' 200', ' 400', ' green'], ['0', '0', '200', '400', ' yellow'], ['200', '0', '200', '400', ' red']]
我觉得您必须创建 1 个新列表,但如果我理解正确,您需要一个嵌套列表,每个子列表中有 5 个元素。
您可以尝试以下方法:
l = ['-200', ' 0', ' 200', ' 400', ' green', '0', '0', '200', '400', ' yellow', '200', '0', '200', '400', ' red']
new = []
for i in range(0, len(l), 5):
new.append(l[i : i+5])
这将逐步遍历您的第一个列表“l”,并将 5 个元素组合到 new 中的子列表中。输出:
[['-200', ' 0', ' 200', ' 400', ' green'], ['0', '0', '200', '400', ' yellow'], ['200', '0', '200', '400', ' red']]
希望这可以帮助
我在之前的回答中详细介绍了一种稍微不同的方法,使用zip
. 先前的答案已作为此答案的副本关闭,因此我在此处添加我的答案以供参考。
您可以使用iter
和将列表分块zip
。
def chunk(lst, n):
return zip(*[iter(lst)]*n)
例子:
In []:
data = ['-200', ' 0', ' 200', ' 400', ' green', '0', '0', '200', '400',
' yellow', '200', '0', '200', '400', ' red']
for l in chunk(data, 5):
print(l)
Out[]:
('-200', ' 0', ' 200', ' 400', ' green')
('0', '0', '200', '400', ' yellow')
('200', '0', '200', '400', ' red')
如果您希望它们在列表中,则:
In []:
list(chunk(data, 5))
Out[]:
[('-200', ' 0', ' 200', ' 400', ' green'), ('0', '0', '200', '400', ' yellow'),
('200', '0', '200', '400', ' red')]
解释:
def chunk(lst, n):
it = iter(lst) # creates an iterator
its = [it]*n # creates a list of n it's (the same object)
return zip(*its) # unpack the list as args to zip(), e.g. when `n=3` - zip(it, it, it)
因为它zip()
在相同的迭代器n
时间上运行,所以它会将原始数据lst
分块成n
.
在 Py3 中,这是惰性的(zip()
返回一个迭代器),所以只会n
根据需要创建块,如果你有一个很大的原始列表,这可能很重要。