如果我有这样的输入(1, 2, 3, 4, 5, 6)
输出必须是...... [[1, 2], [3, 4], [5, 6]]
。
我知道如何处理它是否是一个元素而不是两个元素。
x=[]
for number in numbers:
x.append([number])
我将非常感谢您的帮助!
答案 0 :(得分:1)
这样的事情会起作用:
out = []
lst = (1,2,3,4,5,6,7,8,9,10)
for x in range(len(lst)):
if x % 2 == 0:
out.append([lst[x], lst[x+1]])
else:
continue
要使用此功能,只需将lst
设置为您想要的任何数字列表即可。最终产品存储在out
。
答案 1 :(得分:1)
你可以使用这样的东西。此解决方案也适用于奇数长度列表
def func(lst):
res = []
# Go through every 2nd value | 0, 2, 4, ...
for i in range(0, len(lst), 2):
# Append a slice of the list, + 2 to include the next value
res.append(lst[i : i + 2])
return res
# Output
>>> lst = [1, 2, 3, 4, 5, 6]
>>> func(lst)
[[1, 2], [3, 4], [5, 6]]
>>> lst2 = [1, 2, 3, 4, 5, 6, 7]
>>> func(lst2)
[[1, 2], [3, 4], [5, 6], [7]]
列表理解解决方案
def func(lst):
return [lst[i:i+2] for i in range(0, len(lst), 2)]
在这种情况下,切片效果更好,因为您不必考虑IndexError,因此也可以使用奇数长度。
如果需要,还可以添加另一个参数,以指定所需的内部元素数。
def func(lst, size = 2): # default of 2 it none specified
return [lst[i:i+size] for i in range(0, len(lst), size)]
答案 2 :(得分:1)
有一种更短的方式可以做你想做的事情:
result = []
L = (1,2,3,4,5,6,7,8,9,10)
result = [[L[i], L[i + 1]] for i in range(0, len(L) - 1, 2)]
print(result)
答案 3 :(得分:0)
这个问题存在一些障碍。您希望遍历列表而不超过列表的末尾,并且您需要处理列表具有奇数长度的情况。这是一个有效的解决方案:
def foo(lst):
result = [[x,y] for [x,y] in zip(lst[0::2], lst[1::2])]
return result
如果这看起来很复杂,那就让我们破解代码吧。
索引切片:
lst[0::2]
从第0个元素开始迭代lst
并以2为增量进行迭代。类似地lst[1::2]
从第1个元素开始迭代(通俗地说是第二个元素)并继续以2为增量。
例如:
>>> lst = (1,2,3,4,5,6,7)
>>> print(lst[0::2])
(1,3,5,7)
>>> print(lst[1::2])
(2,4,6)
zip:zip()
获取两个列表(或任何可迭代的对象)并返回包含元组的列表。例如:
>>> lst1 = (10,20,30, 40)
>>> lst2 = (15,25,35)
>>> prit(zip(lst1, lst2))
[(10,15), (20,25), (30,35)]
请注意zip(lst1, lst2)
具有良好的属性,如果其中一个参数比另一个更长,zip()
会在最短的可迭代超出项目时停止压缩。
列表理解:python允许迭代一般。请考虑以下声明:
>>> [[x,y] for [x,y] in zip(lst1,lst2)]
内部位" for [x,y] in zip(lst1,lst2)
"说"遍历zip中的所有值对,并将它们的值赋给x和y"。在声明的其余部分
" [[x,y] for [x,y] ...]
",它表示"对于x和y所采用的每组值,将列表[x,y]存储在更大的列表中"。执行此语句后,您将获得一个列表列表,其中内部列表是zip(lst1,lst2)
答案 4 :(得分:0)
非常明确的解决方案:
l = (1, 2, 3, 4, 5, 6)
l = iter(l)
w = []
for i in l:
sub = []
sub.append(i)
sub.append(next(l))
w.append(sub)
print w