Ich habe eine 26-stellige Liste. Ich möchte eine Liste von Alphabeten nach Zahlen ausdrucken. Zum Beispiel habe ich eine Liste (bestehend aus 26 Zahlen von der Eingabe):

[0,0,0,0,2,0,0,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0]

Mir hat die Ausgabe so gefallen:

[e,e,l,s]

'e' ist 2-mal auf der Ausgabe, weil es auf dem 4. Index das 'e' gemäß der englischen Alphabetbildung ist und die Ziffer auf dem 4. Index 2 ist. Es ist dasselbe für 'l' seitdem ist auf dem 11. Index und seine Ziffer ist 1. Das gleiche gilt für s. Die anderen Buchstaben werden nicht angezeigt, da die Ziffern Null sind.

Zum Beispiel gebe ich eine weitere 26-stellige Eingabe. So was:

[1,2,2,3,4,0,3,4,4,1,3,1,4,4,1,0,0,0,0,0,4,2,3,2,2,1]

Die Ausgabe sollte sein:

[a,b,b,c,c,d,d,d,e,e,e,e,g,g,g,h,h,h,h,i,i,i,i,j,k,k,k,l,m,m,m,m,n,n,n,n,o,u,u,u,u,v,v,w,w,w,x,x,y,y,z]

Ist dies in Python 3 möglich?

2
Mahir 18 Apr. 2018 im 14:08

3 Antworten

Beste Antwort

Sie können chr(97 + item_index) verwenden, um die entsprechenden Elemente abzurufen und dann mit dem Element selbst zu multiplizieren:

In [40]: [j * chr(97 + i) for i, j in enumerate(lst) if j]
Out[40]: ['ee', 'l', 's']

Wenn Sie möchten, dass sie getrennt sind, können Sie das Modul itertools verwenden:

In [44]: from itertools import repeat, chain

In [45]: list(chain.from_iterable(repeat(chr(97 + i), j) for i, j in enumerate(lst) if j))
Out[45]: ['e', 'e', 'l', 's']
5
Kasramvd 18 Apr. 2018 im 11:13

Eine Alternative zur wunderbaren Antwort von @Kasramvd

import string


n = [0,0,0,0,2,0,0,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0]

res = [i * c for i, c in zip(n, string.ascii_lowercase) if i]
print(res)  # -> ['ee', 'l', 's']

Ihr zweites Beispiel ergibt:

 ['a', 'bb', 'cc', 'ddd', 'eeee', 'ggg', 'hhhh', 'iiii', 'j', 'kkk', 'l', 'mmmm', 'nnnn', 'o', 'uuuu', 'vv', 'www', 'xx', 'yy', 'z']

Das Teilen der Zeichenfolgen ('bb' in 'b', 'b') kann mit dem Standardschema erfolgen:

[x for y in something for x in y]
1
Ev. Kounis 18 Apr. 2018 im 11:18

Verwenden Sie einen etwas anderen Ansatz, bei dem die Zeichen wie in Ihrem Beispiel einzeln angegeben werden:

import string

a = [0,0,0,0,2,0,0,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0]

alphabet_lookup = np.repeat(np.arange(len(a)), a)
letter_lookup = np.array(list(string.ascii_lowercase))

res = letter_lookup[alphabet_lookup]
print(res)

Bekommen

['e' 'e' 'l' 's']
1
Ken Syme 18 Apr. 2018 im 11:21