通过参考另一个列表中的次数显示列表中的项目。

时间:2013-12-01 10:59:30

标签: python

我正在尝试在string_list中显示每个项目。但是显示每个项目的次数在display_times列表中。代码应显示2次,b 3次和c次。这是我得到的不正确的。接下来我该怎么办?

string_list = ['a', 'b', 'c']
display_times = ['2', '3', '1']

for item in string_list:
    for times in display_times:
        print("It is " + item)

4 个答案:

答案 0 :(得分:2)

这是一个解决方案

In [12]: for s, t in zip(string_list, display_times):
    for i in range(int(t)):
        print "It is %s" % s
   ....:         
It is a
It is a
It is b
It is b
It is b
It is c

答案 1 :(得分:2)

我认为这是一个很好理解的方法:

zipped = zip(string_list, display_times) #equal to [('a', '2'), ('b', '3'), ('c', '1')]
for value, time in zipped:
    for i in range(int(time)):
        print value

结果:

a
a
b
b
b
c

答案 2 :(得分:2)

您遇到的第一个问题是display_times列表存储字符串而非数字。

有很多快捷方式可以做到这一点,但让我们从简单的方法开始:

>>> for position,item in enumerate(string_list):
...     how_many = int(display_times[position])
...     print('It is {}'.format(item*how_many))
...
It is aa
It is bbb
It is c

您可以使用zip合并两个列表:

>>> zip(string_list, display_times)
[('a', '2'), ('b', '3'), ('c', '1')]

现在你可以做到:

>>> for item,how_many in zip(string_list, display_times):
...     print('It is {}'.format(item*int(how_many)))
...
It is aa
It is bbb
It is c

还有很多其他方法,但它们都涉及上述两种方式的变化。

答案 3 :(得分:1)

for i, v in enumerate(display_times):
    for j in range(int(v)):
        print (string_list[i])

或使用LC:

r = [[string_list[i] for j in range(int(v))] for i,v in enumerate(display_times)]
for i in r:
   print (i)