2016-11-07 129 views
1

如果我有这样的输入(1, 2, 3, 4, 5, 6) 输出必须是... [[1, 2], [3, 4], [5, 6]]python3.2)在列表中追加两个元素(列表中的列表)

我知道如何处理,如果它是一个元素,但不是两个。

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

我会感谢您的任何帮助!

+0

另外我想从输出转换我想花括号。 {1,2,3,4,5,6}如果有可能,你可以给我建议,以获得一个通用的代码,不仅适用于两个分组,但3组。 [[1,2,3],[4,5,6]]谢谢! – meme

+0

oneliner:'''list(zip(a [:: 2],a [1 :: 2]))'''。通过将其包装到一个采用窗口/组大小并在组范围内循环的函数中,可以很容易地使其具有通用性。 – TrigonaMinima

回答

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

你可以使用这样的东西。该解决方案还适用于奇数长度的名单

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)] 
0

这个问题有几个障碍。你想遍历列表而不会超过列表的末尾,并且你需要处理列表有奇数长度的情况。下面是一个可行的解决方案:

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)

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) 
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 
+0

这不起作用。至少对于Python 3(还没有尝试过2)。目前还不清楚,我真的不明白你想做什么。 –

+0

这工作(试用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

+0

这个标签是用于python 3的,所以你需要改成'sub.append(next(l))' –