如何使用 itertools 生成 phone 个数字

How to generate phone numbers with itertools

我想用 itertools 生成所有可能的 phone 数字的文件。

from itertools import permutations
perm = list(permutations(['1','2','3','4','5','6','7','8','9','0'],7))
prefix = ['071','070','076','077','075']
file_to_write = open("numbers.txt",'w')
for pre in prefix:
    for per in perm:
        per = ''.join(per)
        file_to_write.write(pre+per+"\n")


file_to_write.close()`

这给了我一个巨大的数字列表,但有些数字丢失了,因为这不能在组合中使用一个数字两次作为示例,该列表没有项目“0713025693”,因为数字三重复了。我能做什么。请帮助我。

改用itertools.product(笛卡尔积):

from itertools import product
list(product('ab', (0,1,2)))

[('a', 0), ('a', 1), ('a', 2), ('b', 0), ('b', 1), ('b', 2)]

不要使用不允许重复的 permutations,而是使用 product。在这种情况下,您需要:

from itertools import product

product(['1','2','3','4','5','6','7','8','9','0'], repeat=7)

或者,正如 Boris 指出的那样,您可以传递一个字符串而不是一个列表(因为字符串是可迭代的),例如

product('1234567890', repeat=7)

或者您可以 import string 并使用:

product(string.digits, repeat=7)

对于其中任何一个,您都可以将结果传递给 list 以生成一个列表,但它会很长。最好将其保留为迭代器,使用它来遍历值而不实际将它们存储在列表中。只是要注意,作为一个迭代器,if可能只遍历一次,所以如果需要多次遍历,就需要重新创建。