将range()的结果存储为列表变量 - Python

时间:2012-07-23 20:57:26

标签: python python-2.7

我正在对Project Euler进行挑战,以便在python上做得更好(我是初学者),我正在尝试Problem 9

vara = lista[-1]
varb = listb[-1]
varc = listc[-1]

while not(vara < varb < varc):
listb.pop(-1)
lista.pop(-1)
lista.pop(-1)
if ((vara * vara) + (varb * varb) == varc * varc):
    print vara, varb, varc
else:
listc.pop(-1)
if ((vara * vara) + (varb * varb) == varc * varc):
    print vara, varb, varc
else:
    listb.pop(-1)
    if ((vara * vara) + (varb * varb) == varc * varc):
        print vara, varb, varc
    else:
        lista.pop(-1)

我尝试过很多方法让lista / listb / listc的值为1 - 1000,但它们似乎都没有真正起作用

lista = range(1, 1000)
lista = range[1, 1000]

等 任何帮助将不胜感激,谢谢:)

3 个答案:

答案 0 :(得分:4)

要生成1到1000之间的值,您需要将结束值指定为1000 + 1 ,即1001.所以

liasta = range(1, 1001)

将为您提供1到1000之间的值列表。

range()使用半闭区间,这意味着 包含 它生成的值列表中的第一个值,但 排除 最后一个。请注意,如果您未指定起始值,range()将默认为0。您还可以指定增量值,默认为1,除非另有说明。

doc page中的三个例子:

>>> range(10)
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

>>> range(1, 11)
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

>>> range(0, 30, 5)
[0, 5, 10, 15, 20, 25]

答案 1 :(得分:1)

将此用于您的代码:

lista = range(1, 1001)
listb = list(lista)
listc = list(lista)

不要这样做:

lista = listb = listc = range(1, 1001)

因为那时你的pop都在同一个列表上工作。

答案 2 :(得分:0)

虽然您的问题询问如何列出某个范围内的数字列表,但我想问你一个问题:

  

你真的需要三个数字列表,或者你只需​​要   看通过解决方案的可能值?

我问,因为虽然你可以得到你所寻求的答案,但最好的表达方式不如你前进。例如:

for c in range(1, 1001):
    for b in range(1, c):
        for a in range(1, b):
             if is_pythagorean_triple(a, b, c):
                 ...

def is__pythagorean_triple(a, b, c):
    ...

不会创建任何列表(至少没有你需要考虑的列表)。另一个问题是a为何只能达到b