[英]Alternate Alphabet Depending on List Length
我想列出名稱並打印它們,以便每個名稱前面都有一個字母。
例如:
a : John
b : Sam
d : Fiona
etc...
我設法做到了這一點:
import string
player_names = ['John', 'Sam', 'Nami', 'Zoro', 'Luffy', 'Kaiden', 'Usopp', 'FRANKY', 'Gaien', 'Ichigo', 'Izumi', 'Rukia', 'Yagami', 'Goku', 'Jessy', 'Heisenberg', 'Nami', 'Robin', 'Sunny', 'Sanji', 'Kirito', 'Bebop', 'Duffy', 'Luster', 'Yugi', 'Haitham', 'Jamal']
#print (len(player_names))
#print(len(string.ascii_lowercase))
chars_names = [char + ' : ' + player_name for char, player_name in zip(string.ascii_lowercase, player_names)]
print('\n'.join(chars_names))
但是正如你所看到的,因為 ASCII_lowercase 的長度是 26,我們有 27 個名字; 該姓氏不會被打印出來。
我想繼續使用第 26 個名稱之后的每個后續名稱,並為其列出一個雙字母。
例如:
a: John
b: Sam
.....
aa: Lamis
ab: Sandy
等等...
你能告訴我我該怎么做嗎?
您可以創建一個包含所有 ascii 可能性的更長列表:
import string
player_names = ['John', 'Sam', 'Nami', 'Zoro', 'Luffy', 'Kaiden', 'Usopp', 'FRANKY', 'Gaien', 'Ichigo', 'Izumi', 'Rukia', 'Yagami', 'Goku', 'Jessy', 'Heisenberg', 'Nami', 'Robin', 'Sunny', 'Sanji', 'Kirito', 'Bebop', 'Duffy', 'Luster', 'Yugi', 'Haitham', 'Jamal']
keys = list(string.ascii_lowercase)
for i in range(len(player_names) // 26):
keys += [string.ascii_lowercase[i] + c for c in string.ascii_lowercase]
chars_names = [char + ' : ' + player_name for char, player_name in zip(keys, player_names)]
print('\n'.join(chars_names))
Output:
a : John
b : Sam
c : Nami
d : Zoro
e : Luffy
f : Kaiden
g : Usopp
h : FRANKY
i : Gaien
j : Ichigo
k : Izumi
l : Rukia
m : Yagami
n : Goku
o : Jessy
p : Heisenberg
q : Nami
r : Robin
s : Sunny
t : Sanji
u : Kirito
v : Bebop
w : Duffy
x : Luster
y : Yugi
z : Haitham
aa : Jamal
我創建了一個示例列表,它將生成您各自的序列,然后將兩個列表組合起來。
import string
from string import ascii_lowercase
player_names = ['John', 'Sam', 'Nami', 'Zoro', 'Luffy', 'Kaiden', 'Usopp', 'FRANKY', 'Gaien', 'Ichigo', 'Izumi', 'Rukia', 'Yagami', 'Goku', 'Jessy', 'Heisenberg', 'Nami', 'Robin', 'Sunny', 'Sanji', 'Kirito', 'Bebop', 'Duffy', 'Luster', 'Yugi', 'Haitham', 'Jamal']
custom_list= list(ascii_lowercase) +[l1+l2 for l1,l2 in zip(string.ascii_lowercase,player_names) for l2 in ascii_lowercase]
#print('\n'.join(custom_list))
print(dict(zip(custom_list,player_names)))
Output:
{'a': 'John', 'b': 'Sam', 'c': 'Nami', 'd': 'Zoro', 'e': 'Luffy', 'f': 'Kaiden', 'g': 'Usopp', 'h': 'FRANKY', 'i': 'Gaien', 'j': 'Ichigo', 'k': 'Izumi', 'l': 'Rukia', 'm': 'Yagami', 'n': 'Goku', 'o': 'Jessy', 'p': 'Heisenberg', 'q': 'Nami', 'r': 'Robin', 's': 'Sunny', 't': 'Sanji', 'u': 'Kirito', 'v': 'Bebop', 'w': 'Duffy', 'x': 'Luster', 'y': 'Yugi', 'z': 'Haitham', 'aa': 'Jamal'}
我有一個 function 用於這些情況:
import string
def base26_count(value: int):
s = ''
while value > 0:
mod = (value - 1) % 26
s = string.ascii_lowercase[mod] + s
value = (value - 1) // 26
return s
它可以用來以與您描述的相同的方式計算字母,它返回值''
用於輸入0
, 'a'
用於1
, 'aa'
用於27
等等......
要在您的用例中使用它,我們可以執行以下操作:
player_names = ['John', 'Sam', 'Nami', 'Zoro', 'Luffy', 'Kaiden', 'Usopp', 'FRANKY', 'Gaien', 'Ichigo', 'Izumi', 'Rukia', 'Yagami', 'Goku', 'Jessy', 'Heisenberg', 'Nami', 'Robin', 'Sunny', 'Sanji', 'Kirito', 'Bebop', 'Duffy', 'Luster', 'Yugi', 'Haitham', 'Jamal']
for i, name in enumerate(player_names):
print('{}: {}'.format(base26_count(i + 1), name))
output:
a: John
b: Sam
c: Nami
d: Zoro
e: Luffy
f: Kaiden
g: Usopp
h: FRANKY
i: Gaien
j: Ichigo
k: Izumi
l: Rukia
m: Yagami
n: Goku
o: Jessy
p: Heisenberg
q: Nami
r: Robin
s: Sunny
t: Sanji
u: Kirito
v: Bebop
w: Duffy
x: Luster
y: Yugi
z: Haitham
aa: Jamal
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.