Ich versuche, jedes Element in string_list anzuzeigen. Die Häufigkeit, mit der die einzelnen Elemente angezeigt werden, befindet sich jedoch in der Liste display_times. Der Code sollte a 2 mal, b 3 mal und c einmal anzeigen. Das habe ich, was nicht richtig ist. Was soll ich als nächstes tun?

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
zingy 1 Dez. 2013 im 14:59

4 Antworten

Beste Antwort

Hier ist eine Lösung

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
2
jpic 1 Dez. 2013 im 18:20

Das erste Problem, das Sie haben, ist die display_times -Liste, in der Zeichenfolgen und keine Zahlen gespeichert werden.

Es gibt viele Möglichkeiten, dies zu tun, aber beginnen wir mit dem einfachen Weg:

>>> 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

Sie können zip verwenden, um die beiden Listen zu kombinieren:

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

Jetzt können Sie Folgendes tun:

>>> 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

Es gibt viele andere Möglichkeiten, aber alle beinhalten eine Variation der beiden oben genannten.

2
Burhan Khalid 1 Dez. 2013 im 11:07
for i, v in enumerate(display_times):
    for j in range(int(v)):
        print (string_list[i])

Oder mit einem LC:

r = [[string_list[i] for j in range(int(v))] for i,v in enumerate(display_times)]
for i in r:
   print (i)
1
aIKid 1 Dez. 2013 im 11:07

Ich denke, das ist ein guter verständlicher Weg, dies zu tun:

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

Ergebnis:

a
a
b
b
b
c
2
yuvi 1 Dez. 2013 im 11:05