如何制作一个连续的字母列表 python(从 a-z 然后从 aa、ab、ac 等)
How to make a continuous alphabetic list python (from a-z then from aa, ab, ac etc)
我想为类似于 excel 工作表的应用程序制作一个按字母顺序排列的列表。
用户输入单元格数量,我想生成列表。
例如,用户需要 54 个单元格。然后我会生成
'a','b','c',...,'z','aa','ab','ac' ,...,'az','ba','bb'
我可以从 [ref]
生成列表
from string import ascii_lowercase
L = list(ascii_lowercase)
如何将它们拼接在一起?
PHP 的类似问题已被问到 here。有人有 python 等价物吗?
您可以使用列表理解。
from string import ascii_lowercase
L = list(ascii_lowercase) + [letter1+letter2 for letter1 in ascii_lowercase for letter2 in ascii_lowercase]
from string import ascii_lowercase
import itertools
def iter_all_strings():
for size in itertools.count(1):
for s in itertools.product(ascii_lowercase, repeat=size):
yield "".join(s)
for s in iter_all_strings():
print(s)
if s == 'bb':
break
结果:
a
b
c
d
e
...
y
z
aa
ab
ac
...
ay
az
ba
bb
这具有超越两个字母组合的额外好处。如果你需要一百万串,它会很乐意给你三四五串。
额外的风格提示:如果你不喜欢在底部循环中有明确的 break
,你可以使用 islice
让循环自行终止:
for s in itertools.islice(iter_all_strings(), 54):
print s
关注@Kevin 的回答:
from string import ascii_lowercase
import itertools
# define the generator itself
def iter_all_strings():
size = 1
while True:
for s in itertools.product(ascii_lowercase, repeat=size):
yield "".join(s)
size +=1
下面的代码可以生成字符串,例如可用于生成唯一标签。
# define the generator handler
gen = iter_all_strings()
def label_gen():
for s in gen:
return s
# call it whenever needed
print label_gen()
print label_gen()
print label_gen()
我终于自己做了。
我认为它可以创建任意数量的字母。
def AA(n, s):
r = n % 26
r = r if r > 0 else 26
n = (n - r) / 26
s = chr(64 + r) + s
if n > 26:
s = AA(n, s)
elif n > 0:
s = chr(64 + n) + s
return s
n = quantity
| r = remaining (26 letters A-Z)
| s = string
要打印列表:
def uprint(nc):
for x in range(1, nc + 1):
print AA(x,'').lower()
在转换为 python 之前使用 VBA :
Function AA(n, s)
r = n Mod 26
r = IIf(r > 0, r, 26)
n = (n - r) / 26
s = Chr(64 + r) & s
If n > 26 Then
s = AA(n, s)
ElseIf n > 0 Then
s = Chr(64 + n) & s
End If
AA = s
End Function
打印小写和大写承租人的xl单元格范围集合
Upper_case:
from string import ascii_uppercase
import itertools
def iter_range_strings(start_colu):
for size in itertools.count(1):
for string in itertools.product(ascii_uppercase, repeat=size):
yield "".join(string)
input_colume_range = ['A', 'B']
input_row_range= [1,2]
for row in iter_range_strings(input_colume_range[0]):
for colum in range(int(input_row_range[0]), int(input_row_range[1]+1)):
print(str(row)+ str(colum))
if row == input_colume_range[1]:
break
结果:
A1
A2
B1
B2
两行(加上导入):
from string import ascii_uppercase as ABC
count = 100
ABC+=' '
[(ABC[x[0]] + ABC[x[1]]).strip() for i in range(count) if (x:= divmod(i-26, 26))]
如果需要重复使用,请将其包裹在 function/lambda 中。
在 while 循环中使用 neo 的洞察力。
对于给定的具有升序字符的可迭代对象。 'abcd...'。
n是以1作为第一个位置开始的表示的第N个位置。
def char_label(n, chars):
indexes = []
while n:
residual = n % len(chars)
if residual == 0:
residual = len(chars)
indexes.append(residual)
n = (n - residual)
n = n // len(chars)
indexes.reverse()
label = ''
for i in indexes:
label += chars[i-1]
return label
稍后您可以使用 for 循环打印您需要的 'labels' 范围 n 的列表:
my_chrs = 'abc'
n = 15
for i in range(1, n+1):
print(char_label(i, my_chrs))
或构建列表理解等...
代码:
alphabet = ["a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z"]
for i in range(len(alphabet)):
for a in range(len(alphabet)):
print(alphabet[i] + alphabet[a])
结果:
aa
ab
ac
ad
ae
af
ag
ah
ai
aj
ak
al
am
...
我想为类似于 excel 工作表的应用程序制作一个按字母顺序排列的列表。
用户输入单元格数量,我想生成列表。 例如,用户需要 54 个单元格。然后我会生成
'a','b','c',...,'z','aa','ab','ac' ,...,'az','ba','bb'
我可以从 [ref]
生成列表 from string import ascii_lowercase
L = list(ascii_lowercase)
如何将它们拼接在一起? PHP 的类似问题已被问到 here。有人有 python 等价物吗?
您可以使用列表理解。
from string import ascii_lowercase
L = list(ascii_lowercase) + [letter1+letter2 for letter1 in ascii_lowercase for letter2 in ascii_lowercase]
from string import ascii_lowercase
import itertools
def iter_all_strings():
for size in itertools.count(1):
for s in itertools.product(ascii_lowercase, repeat=size):
yield "".join(s)
for s in iter_all_strings():
print(s)
if s == 'bb':
break
结果:
a
b
c
d
e
...
y
z
aa
ab
ac
...
ay
az
ba
bb
这具有超越两个字母组合的额外好处。如果你需要一百万串,它会很乐意给你三四五串。
额外的风格提示:如果你不喜欢在底部循环中有明确的 break
,你可以使用 islice
让循环自行终止:
for s in itertools.islice(iter_all_strings(), 54):
print s
关注@Kevin 的回答:
from string import ascii_lowercase
import itertools
# define the generator itself
def iter_all_strings():
size = 1
while True:
for s in itertools.product(ascii_lowercase, repeat=size):
yield "".join(s)
size +=1
下面的代码可以生成字符串,例如可用于生成唯一标签。
# define the generator handler
gen = iter_all_strings()
def label_gen():
for s in gen:
return s
# call it whenever needed
print label_gen()
print label_gen()
print label_gen()
我终于自己做了。 我认为它可以创建任意数量的字母。
def AA(n, s):
r = n % 26
r = r if r > 0 else 26
n = (n - r) / 26
s = chr(64 + r) + s
if n > 26:
s = AA(n, s)
elif n > 0:
s = chr(64 + n) + s
return s
n = quantity
| r = remaining (26 letters A-Z)
| s = string
要打印列表:
def uprint(nc):
for x in range(1, nc + 1):
print AA(x,'').lower()
在转换为 python 之前使用 VBA :
Function AA(n, s)
r = n Mod 26
r = IIf(r > 0, r, 26)
n = (n - r) / 26
s = Chr(64 + r) & s
If n > 26 Then
s = AA(n, s)
ElseIf n > 0 Then
s = Chr(64 + n) & s
End If
AA = s
End Function
打印小写和大写承租人的xl单元格范围集合
Upper_case:
from string import ascii_uppercase
import itertools
def iter_range_strings(start_colu):
for size in itertools.count(1):
for string in itertools.product(ascii_uppercase, repeat=size):
yield "".join(string)
input_colume_range = ['A', 'B']
input_row_range= [1,2]
for row in iter_range_strings(input_colume_range[0]):
for colum in range(int(input_row_range[0]), int(input_row_range[1]+1)):
print(str(row)+ str(colum))
if row == input_colume_range[1]:
break
结果:
A1
A2
B1
B2
两行(加上导入):
from string import ascii_uppercase as ABC
count = 100
ABC+=' '
[(ABC[x[0]] + ABC[x[1]]).strip() for i in range(count) if (x:= divmod(i-26, 26))]
如果需要重复使用,请将其包裹在 function/lambda 中。
在 while 循环中使用 neo 的洞察力。 对于给定的具有升序字符的可迭代对象。 'abcd...'。 n是以1作为第一个位置开始的表示的第N个位置。
def char_label(n, chars):
indexes = []
while n:
residual = n % len(chars)
if residual == 0:
residual = len(chars)
indexes.append(residual)
n = (n - residual)
n = n // len(chars)
indexes.reverse()
label = ''
for i in indexes:
label += chars[i-1]
return label
稍后您可以使用 for 循环打印您需要的 'labels' 范围 n 的列表:
my_chrs = 'abc'
n = 15
for i in range(1, n+1):
print(char_label(i, my_chrs))
或构建列表理解等...
代码:
alphabet = ["a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z"]
for i in range(len(alphabet)):
for a in range(len(alphabet)):
print(alphabet[i] + alphabet[a])
结果:
aa
ab
ac
ad
ae
af
ag
ah
ai
aj
ak
al
am
...