以错误的方式迭代和打印列表

时间:2015-06-30 14:25:17

标签: python python-2.7

有以下两个清单:

sist = ["item1", "item2", "item3"]
numbers = [2,1,4]

我想打印sist numbers相同索引次数的元素。

这意味着在发布的示例中,我想要的输出是:

item1
item1
item2
item3
item3
item3
item3

这是我尝试过的,但没有成功:

for idx in xrange(len(sist)):
    for num in numbers:
        i = 0
        print num
        while i < num:
            print sist[idx]
            i = i + 1 

我认为我正在以错误的方式迭代,因为我得到了这个输出:

2
item1
item1
1
item1
4
item1
item1
item1
item1
2
item2
item2
1
item2
4
item2
item2
item2
item2
2
item3
item3
1
item3
4
item3
item3
item3
item3

有人可以告诉我我做错了什么以及如何解决它?

5 个答案:

答案 0 :(得分:5)

如果你想像这样使用嵌套的for循环,你可以做

for item, rep in zip(sist, numbers):
    for _ in range(rep):
        print(item)

输出

item1
item1
item2
item3
item3
item3
item3

答案 1 :(得分:5)

你可以使用zip函数将两个列表连接到它们对应的索引,然后打印第一个元素(来自sist)作为第二个元素的次数(来自数字)

sist = ["item1", "item2", "item3"]
numbers = [2,1,4]
for x, y in zip(sist, numbers):
    for _ in range(y):
        print(x)

输出是 -

item1
item1
item2
item3
item3
item3
item3

答案 2 :(得分:4)

sist = ["item1", "item2", "item3"]
numbers = [2,1,4]

for i in range(len(numbers)):
    for j in numbers[i]:
        print(sist[i])
    print('')

我认为这是您正在寻找的理想输出。它遍历数字数组并使用每个元素作为第二个for循环的范围。由于数字和sist的长度相同,因此您只需使用i作为sist的索引

答案 3 :(得分:3)

为了补充其他答案,您可以避免嵌套循环:

from __future__ import print_function # This isn't needed in Python 3.

for n, item in zip(numbers, sist):
    print([item] * n, sep='\n')

答案 4 :(得分:2)

这需要嵌套的for循环,如下所示:

>>> sist = ["item1", "item2", "item3"]
>>> numbers = [2,1,4]
>>> for i in xrange(len(numbers)):
    for j in xrange(numbers[i]):
        print sist[i]


item1
item1
item2
item3
item3
item3
item3