不使用配方从循环法创建列表列表

时间:2017-04-01 06:26:22

标签: python list

我是python的新手,并试图学习如何将列表循环到列表列表中。我看到帖子的答案指向标准的循环法食谱,但我不理解其中的一些概念,并且更喜欢更简单的解决方案。

我希望使用一个函数来实现这样的功能,但我还没有能够接近:

MYLIST = ['apples', 'oranges', 'bananas', 'grapes', 'strawberries', 'pears']
>>>myfunc(MYLIST)
[['apples', 'grapes'], ['oranges', 'strawberries'], ['bananas', 'pears']]

在尝试使用for循环,while循环和if语句的组合解决此问题后,我感到非常困惑。我没做过任何工作。

我没有任何有效或接近工作的代码。任何帮助,将不胜感激。感谢。

4 个答案:

答案 0 :(得分:0)

尝试以下代码我不太了解循环算法,但

{{1}}

答案 1 :(得分:0)

@Abhishek gurjar你的代码给出了一个带有TypeError的回溯。我认为这是因为在float中输出的真正除法。如果表达式len(l)/ 2在int()函数内,它可以工作。 :)

l = ['apples', 'oranges', 'bananas', 'grapes', 'strawberries', 'pears']

half = int(len(l) / 2)
l1 = l[:half]
l2 = l[half:]
l3 = []
for i in range(half):
    l3 += [l1[i],l2[i]],
print l3

答案 2 :(得分:0)

解决方案:此行为在more_itertools.distribute see documentation for details中实施。只需pip install more-itertools并编写以下代码:

import more_itertools

list_ = ['apples', 'oranges', 'bananas', 'grapes', 'strawberries', 'pears']
[list(c) for c in list(more_itertools.distribute(3, list_))] 
# [['apples', 'grapes'], ['oranges', 'strawberries'], ['bananas', 'pears']]

解释:后者在n容器之间重新分配可迭代的内容。

注意,这不是roundrobin配方所做的,它产生来自n个迭代的交错元素,例如roundrobin('ABC', 'D', 'EF') --> A D E B F C。这会创建一个单独的元素流,不需要在不同的容器之间进行划分。

答案 3 :(得分:0)

因为你是python的新手,你说“我没有做过任何工作。”我想你可能不知道你不能将一些参数传递给一个函数并在其中产生全局效果功能。

这是我所说的

的样本
>>> def f(a):  
       a = [0,1,2,3]

>>> t = [0,0,0,0]
>>> f(t)
>>> t
[0,0,0,0]

如何使用列表中的项目是可以的

>>> def f(a):
        a[0] = 0
        a[1] = 1
        a[2] = 2
        a[3] = 3
>>> t = [0,0,0,0]
>>> f(t)
>>> t
[0,1,2,3]

另一个解决方案是返回结果

>>> def f(a):  
       a = [0,1,2,3]
       return a

>>> t = [0,0,0,0]
>>> t = f(t)
>>> t
[0,1,2,3]