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?
3 Antworten
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']
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]
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']
Verwandte Fragen
Neue Fragen
python
Python ist eine dynamisch typisierte Mehrzweck-Programmiersprache mit mehreren Paradigmen. Es wurde entwickelt, um schnell zu lernen, zu verstehen, zu verwenden und eine saubere und einheitliche Syntax durchzusetzen. Bitte beachten Sie, dass Python 2 ab dem 01.01.2020 offiziell nicht mehr unterstützt wird. Fügen Sie für versionenspezifische Python-Fragen das Tag [python-2.7] oder [python-3.x] hinzu. Wenn Sie eine Python-Variante (z. B. Jython, PyPy) oder eine Bibliothek (z. B. Pandas und NumPy) verwenden, fügen Sie diese bitte in die Tags ein.