如何将每个 x 个元素拆分一个列表并将这些 x 个元素添加到一个新列表中?
Posted
技术标签:
【中文标题】如何将每个 x 个元素拆分一个列表并将这些 x 个元素添加到一个新列表中?【英文标题】:How can you split a list every x elements and add those x amount of elements to an new list? 【发布时间】:2013-03-31 05:19:57 【问题描述】:我有一个包含多个整数和字符串的列表
['-200', ' 0', ' 200', ' 400', ' green', '0', '0', '200', '400', ' yellow', '200', '0', '200', '400', ' red']
我很难将每个 5 elements
的列表分开并创建一个只有 5 个元素的新列表。
但是,我不想要 3 个不同的列表,我只想要一个在每次新的 5 elements
通过时都会更改。
【问题讨论】:
【参考方案1】:我在之前的answer 中使用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
的块,如果您有一个很大的原始列表,这可能很重要。
【讨论】:
【参考方案2】:你可以在一个句子中做到这一点
>>> 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']]
【讨论】:
【参考方案3】:我觉得您必须创建 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']]
希望对你有帮助
【讨论】:
【参考方案4】:你想要这样的东西:
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'])
【讨论】:
以上是关于如何将每个 x 个元素拆分一个列表并将这些 x 个元素添加到一个新列表中?的主要内容,如果未能解决你的问题,请参考以下文章