在Python中迭代Alpha Numeri的数组/列表

2024-09-27 23:20:25 发布

您现在位置:Python中文网/ 问答频道 /正文

在3个单独的场合迭代(A-Z+0-9)的最佳方法是什么。 例如AAA,AAB..AA0,AA1..ZZ0,ZZ1…一直到999。对于数字或字符是否出现在两个插槽中都没有限制。在

chars = [string.ascii_uppercase + string.digits]
genned_chars = []
for char in list(itertools.product(''.join(char), repeat=3)):
    genned_chars.append(''.join(char))

从那里我要去哪里?在

编辑:

^{pr2}$

Tags: 方法string数字字符joincharaaa场合
3条回答

您不需要将字符串放入list中,也不需要使用list作为生成器,也不需要使用列表理解来连接产品:

>>> import string
>>> chars = string.ascii_uppercase + string.digits
>>> genned_chars=[''.join(i) for i in itertools .product(chars,repeat=3)]

您可以不使用itertools通过对chars字符串进行三次传递来完成。但我不确定性能如何(编辑:我已经确认这比上面@Kasra的itertools列表理解解决方案要慢——在我的机器上大约是15ms),但是通过查看代码可以更清楚地看到您在做什么。在

import string

chars = string.ascii_uppercase + string.digits
genned_chars = []

for a in chars:
   for b in chars:
       for c in chars:
           genned_chars.append('{0}{1}{2}'.format(a, b, c))

编辑2:然而,使用列表理解实现上述功能比使用itertools更快:

^{pr2}$

无关,但可能有帮助取决于你在做什么。在

假设您要按索引选择一个数字,然后直接转到该字符串。在

>>> import string
>>> chars = string.ascii_uppercase + string.digits
>>> len_chars = len(chars)
>>> N = 3
>>> i = 0
>>> ''.join([chars[(i // len_chars**j)%len_chars] for j in range(N-1,-1,-1)])
'AAA'
>>> i = 569
>>> ''.join([chars[(i // len_chars**j)%len_chars] for j in range(N-1,-1,-1)])
'AP3'

这可能是有用的,如果你正在创建一个网址缩写,例如。记住要达到的索引,将其递增1,然后返回新的组合。在

相关问题 更多 >

    热门问题