我想要输入一个数字,例如:30,它会打印出一对数字列表,每对数字之间的差异为1。
这样的事情: 10, 12, 21, 23
数字如:1234,1021,1212
答案 0 :(得分:2)
只是有这样的东西
num=30
i=10
retArr=[]
while i<num:
temp=str(i)
if len(temp)<2:
i++
continue
else:
diffNum=abs(ord(str[0])-ord(str[1]))
if diffNum==1:
retArr.append(diffNum)
i++
for i in range(0,len(retArr)):
print retArr[i]
这应该适用于两位数字,可以修改为适合您喜欢的任何数字
答案 1 :(得分:0)
如果我理解正确,你想找到一些数字,每对数字之间的差异为1。
我不打算编写所有代码,但我会展示一些例子。
首先,对所有两位数字进行排列(或者只使用for循环)。
lst = []
for i in range(10,100): # could use xrange()
si = str(i)
if abs(int(si[0])-int(si[1])) == 1:
lst.append(i)
print lst
#[10, 12, 21, 23, 32, 34, 43, 45, 54, 56, 65, 67, 76, 78, 87, 89, 98]
您也可以使用列表理解来创建此列表:
lst = [i for i in xrange(10,100) if abs(int(str(i)[0])-int(str(i)[1])) == 1]
#[10, 12, 21, 23, 32, 34, 43, 45, 54, 56, 65, 67, 76, 78, 87, 89, 98]
然后,您可以将所有数字转换为字符串,并使用排列生成更多4,6,8等数字数字
lst = [str(i) for i in lst]
导入itertools并进行排列:
import itertools
numberOfPairs = 2 # change this
lstNew = ["".join(i) for i in itertools.permutations(lst,numberOfPairs)]
lstNew
现在是:
['1012', '1021', '1023', '1032', '1034', '1043', '1045', '1054',
'1056', '1065', '1067', '1076', '1078', '1087', '1089', '1098',
'1210', '1221', '1223', '1232', '1234', '1243', '1245', '1254',
'1256', '1265', ... , '9889']
如果需要,可以将它们全部转换回字符串中的整数:
lstNew = [int(i) for i in lstNew]
哪会给:
[1012, 1021, 1023, 1032, 1034, 1043, 1045, 1054,
1056, 1065, 1067, 1076, 1078, 1087, 1089, 1098,
1210, 1221, 1223, 1232, 1234, 1243, 1245, 1254,
1256, 1265, ... , 9889]
我想我只是写了这一切......