首页 > 解决方案 > 取决于列表长度的替代字母

问题描述

我想列出名称并打印它们,以便每个名称前面都有一个字母。

例如:

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

等等...

你能告诉我我该怎么做吗?

标签: python

解决方案


您可以创建一个包含所有 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))

输出:

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

推荐阅读