我正在尝试在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)
答案 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)