python3.2)在列表中附加两个元素(列表中的列表)

时间:2016-11-07 03:31:20

标签: list python-3.x

如果我有这样的输入(1, 2, 3, 4, 5, 6) 输出必须是...... [[1, 2], [3, 4], [5, 6]]

我知道如何处理它是否是一个元素而不是两个元素。

x=[]
for number in numbers:
    x.append([number])

我将非常感谢您的帮助!

5 个答案:

答案 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