-2

私のプロジェクトでは、ファイルを確認する必要があり、見つけたすべての車に 3 文字と 2 つの数字を使用して名前を付ける必要があります。例:ABC01。このような名前を自動的に生成する関数をプログラムするにはどうすればよいでしょうか。たとえば、AAA01 で始まり、AAA99 まで続き、次に AAB01 というように、名前を付ける車がなくなるまで続きます。私の質問は、これらの名前を生成する関数を作成する方法です。名前を付ける車が残っているかどうかを確認するために if ステートメントを作成できます。ありがとうございます。

4

3 に答える 3

3

itertools.product()これに適しています:

from itertools import product
import string

pools = [string.ascii_uppercase]*3 + [string.digits]*2
names = (''.join(c) for c in product(*pools) if c[-2:] != ('0', '0'))
# next(names) will give you the next unused name

例えば:

>>> next(names)
'AAA01'
>>> next(names)
'AAA02'
>>> next(names)
'AAA03'
于 2012-11-30T16:42:04.607 に答える
2

使用してitertools.product...

from string import ascii_uppercase
from itertools import product

def my_key_generator():
    letters = product(ascii_uppercase, repeat=3)
    letters_nums = product(letters, range(1, 100))
    for letters, nums in letters_nums:
        yield '{}{:02}'.format(''.join(letters), nums)

そして、チェックする:

from itertools import islice
keys = my_key_generator()
print list(islice(keys, 101))
# ['AAA01', 'AAA02', 'AAA03' [...snip...] 'AAA98', 'AAA99', 'AAB01', 'AAB02']
于 2012-11-30T16:42:44.183 に答える
0

Python 3.3 以降の場合

import string
from itertools import product

L = string.letters[26:]
I = map(str, range(10))
names = map("".join, itertools.product(L, L, L, I, I))

使用法:

>>> for n in names:
>>>     print n

または

>>> from itertools import islice
>>> print(list(islice(names, 0, 10)))
['AAA00', 'AAA01', 'AAA02', 'AAA03', 'AAA04', 'AAA05', 'AAA06', 'AAA07', 'AAA08', 'AAA09']

Python 2.7+ の場合は、itertools.imapの代わりに使用する必要がありmapます。

于 2012-11-30T16:47:40.077 に答える