如何解决如何使用itertools生成电话号码
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',因为重复了数字3。我能做什么。请帮助我。
解决方法
请使用permutations
,而不要使用不允许重复的product
。在这种情况下,您需要:
from itertools import product
product(['1','2','3','4','5','6','7','8','9','0'],repeat=7)
或者,正如鲍里斯指出的那样,您可以传递字符串而不是列表(因为字符串是可迭代的),例如
product('1234567890',repeat=7)
或者您可以import string
并使用:
product(string.digits,repeat=7)
对于其中任何一个,您都可以将结果传递到list
来生成列表,但这会很长。最好将其保留为迭代器,使用它来迭代值,而不实际将它们存储在列表中。请注意,作为迭代器,如果只能被遍历一次,那么如果需要多次遍历,则需要重新创建它。
改为使用itertools.product
(笛卡尔积):
from itertools import product
list(product('ab',(0,1,2)))
[('a',0),('a',1),2),('b',2)]
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。