如何使用 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可能只遍历一次,所以如果需要多次遍历,就需要重新创建。
我想用 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可能只遍历一次,所以如果需要多次遍历,就需要重新创建。