我想检查一下,例如,数字'2'是否在4059304593中。 我的目的是检查是否有任何数字1-9不在我的整数。这就是我的尝试:
for i in xrange(10):
for j in xrange(100):
num = str(i^j)
one_count = 0
two_count = 0
for k in xrange(len(num)):
if num[k] == 1:
one_count += 1
if num[k] == 2:
two_count += 1
然后我的“计数”将一直下降到nine_count,如果任何计数为0,那么该数字不在'num'中。从我在这些网站上看到的内容来看,我的脚本效率低下 - 有人能指出更好的方法吗?
答案 0 :(得分:7)
这个"数字"事物需要一个字符串方法,而不是一个数字方法(让我想起一些Project Euler谜题)。
我首先从你的号码的数字中创建一个set
(同时删除重复的数字)
s = set(str(4059304593))
然后检查一个数字:
print('2' in s)
(请注意in
的{{1}}是高性能的)
然后,检查set
是否包含所有s
数字:
013456789
(如果必须多次执行此操作,则可能需要使用字符串创建print(s.issuperset("013456789"))
,set
将更快地运行)
答案 1 :(得分:2)
您可以将数字转换为字符串,然后转换为设置以获取唯一数字。
您只需要在0-9中迭代数字,找到原始数字中不存在的数字:
>>> set(map(int,str(4059304593)))
set([0, 9, 3, 4, 5])
>>> digits = _
>>> [i for i in range(10) if i not in digits]
[1, 2, 6, 7, 8]
答案 2 :(得分:0)
另一种方法是将-
与集合一起使用:
set('0123456789') - set(str(4059304593))
结果是所有不在整数中的数字:
{'2','7','1','6','8'}