我的问题是,我有一个数字列表,如果试图将列表中的每个元素保存在一个变量中以拆分它们,那么我得到的错误列表索引超出了范围。但如果我尝试whithoul和wihle loup,并对列表中的2或3个元素手动执行,它就可以工作了。你知道吗
我在stackoverflow和reddit上尝试了很多不同的可能性,但是northing成功了。你知道吗
import itertools
from itertools import combinations
from itertools import permutations
from itertools import combinations_with_replacement
f = 2, 'f'
u = 3, 'u'
th = 5, 'th'
o = 7, 'o'
r = 11, 'r'
c = 13, 'c/k'
g = 17, 'g'
w = 19, 'w'
h = 23, 'h'
n = 29, '29'
i = 31, 'i'
j = 37, 'j'
s = 53, 's/z'
t = 59, 't'
b = 61, 'b'
e = 67, 'e'
m = 71, 'm'
l = 73, 'l'
ng = 79, 'ng/ing'
oe = 83, 'oe'
d = 89, 'd'
a = 97, 'a'
ae = 101, 'ae'
y = 103, 'y'
eo = 41, 'eo'
p = 43, 'p'
x = 47, 'x'
ia = 107, 'ia,io'
ea = 109, 'ea'
runen = [f, u, th, o, r, c, g, w, h, n, i, j, s, t, b, e, m, l, ng, oe, d, a, ae, y, eo, p, x, ia, ea]
runen1 = [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97, 101, 103, 43, 47, 107, 109]
kek = list(combinations(runen1, 2))
zero = 0
null = 0
while(zero < len(kek)):
jayjay = kek[null]
jayjay1 = jayjay.replace(',', '')
jayjay1 = jayjay.replace("'", '')
jayjay1 = jayjay.replace('(', '')
jayjay1 = jayjay.replace(')', '')
jayjay1 = jayjay.replace(' ', '')
newlist = []
newlist.append(jayjay)
del kek[null]
null = null +1
print(newlist)
我将新列表导出为输出 但是输出是错误的:列表索引超出范围
首先,这需要一些mod来重现您的错误:
经过这些修改后,我得到:
你为什么越界?好吧,您正在访问
kek[null]
,但是while
循环正在检查的条件是zero < len(kek)
。这些不一样。你知道吗其次,您几乎从不需要在Python中使用索引。它不像C,索引是完成迭代的唯一方法。如果要迭代,可以执行以下操作:
第三,您不想在循环期间重新初始化
newlist = []
。把它放在圈外。你知道吗第四,不要对正在迭代的内容调用
del
。你知道吗第五,不需要
jayjay1
,只需在适当的地方修改jayjay
。你知道吗综合起来:
这与您的(原始)代码很接近,如果您增加了组合的数量,它也会起作用。你知道吗
如果你对编程很认真的话,学会调试是一项非常宝贵的技能。我强烈建议您阅读https://ericlippert.com/2014/03/05/how-to-debug-small-programs/,并学习使用
pdb
(import pdb; pdb.set_trace()
)。错误会不断出现,而且你不想每次都发邮件。你知道吗嗯。你知道吗
你把事情弄得太复杂了。使用列表理解:
如果你想从2推广。您可以使用:
然后,例如,
kspots(runen1,17)
将是您似乎想要的(大)列表。这个列表有21474180个元素,在我的机器上生成要花一分钟的时间,所以您可能希望使用生成器表达式而不是列表理解(用(,)
替换外部的[,]
)相关问题 更多 >
编程相关推荐