如果我有这样的输入(1, 2, 3, 4, 5, 6)
输出必须是... [[1, 2], [3, 4], [5, 6]]
。python3.2)在列表中追加两个元素(列表中的列表)
我知道如何处理,如果它是一个元素,但不是两个。
x=[]
for number in numbers:
x.append([number])
我会感谢您的任何帮助!
如果我有这样的输入(1, 2, 3, 4, 5, 6)
输出必须是... [[1, 2], [3, 4], [5, 6]]
。python3.2)在列表中追加两个元素(列表中的列表)
我知道如何处理,如果它是一个元素,但不是两个。
x=[]
for number in numbers:
x.append([number])
我会感谢您的任何帮助!
像这样的工作:
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
中。
你可以使用这样的东西。该解决方案还适用于奇数长度的名单
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)]
这个问题有几个障碍。你想遍历列表而不会超过列表的末尾,并且你需要处理列表有奇数长度的情况。下面是一个可行的解决方案:
def foo(lst):
result = [[x,y] for [x,y] in zip(lst[0::2], lst[1::2])]
return result
如果这看起来令人费解,让我们分解代码。
指数切片: lst[0::2]
遍历lst
通过起始于第一元件(俗称第二元件),起始于的2.同样lst[1::2]
迭代增量第0个元素并且前进,并继续以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)
”说:“通过对所有在拉链值的迭代,并给它们的值x和y”。在声明 “[[x,y] for [x,y] ...]
”的其余部分中,它表示“对于x和y的每组值,使列表[x,y]存储在更大的列表中”。一旦这个语句的执行,你有名单,其中内部列表是对所有可能的zip(lst1,lst2)
有你想要的东西做的更短的方式列表:
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)
非常明确的解决方案:
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
这不起作用。至少对于Python 3(还没有尝试过2)。目前还不清楚,我真的不明白你想做什么。 –
这工作(试用2.6)。去尝试一下 ! 下一个方法是迭代集合的关键。 。输入:(1,2,3,4,5,6) 输出:[[1,2],[3,4],[5,6]] l =(1,2,3,4,5,6) 4,5,6) 打印升 升= ITER(升) W = [] 对于i在升: 子= [] sub.append(ⅰ) sub.append(l.next()) w.append(sub) print w – anati
这个标签是用于python 3的,所以你需要改成'sub.append(next(l))' –
另外我想从输出转换我想花括号。 {1,2,3,4,5,6}如果有可能,你可以给我建议,以获得一个通用的代码,不仅适用于两个分组,但3组。 [[1,2,3],[4,5,6]]谢谢! – meme
oneliner:'''list(zip(a [:: 2],a [1 :: 2]))'''。通过将其包装到一个采用窗口/组大小并在组范围内循环的函数中,可以很容易地使其具有通用性。 – TrigonaMinima