簡體   English   中英

取決於列表長度的替代字母

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM