需要帮助迭代列表上的循环

时间:2013-11-15 03:26:59

标签: python

有人可以解释一下吗?

userData = 10
emptyList = [0] * userData
for i in emptyList: 
    emptyList[i] = userData
    print(emptyList)
    userData -= 1

在我看来,这段代码应该做的不同于它。

我正在寻找什么 - 无论userData的值是什么,我希望它在列表emptyList中的顺序值中编入索引。

这个,我想会给我一套[10,9,8]等等......它不会......它只会改变每次迭代中的第一个变量

我做错了什么?

我让它以另一种方式工作,userData = 10 emptyList = [] 对于范围内的i(userData):     emptyList.append(ⅰ)     userData - = 1     print(emptyList)

但那不是我喜欢的方式..我需要那套0中的0我认为

5 个答案:

答案 0 :(得分:2)

userData = 10
emptyList = [0] * userData
print emptyList

将打印

[0, 0, 0, 0, 0, 0, 0, 0, 0, 0]

并在循环中,

for i in emptyList:
    print i,

将打印

0 0 0 0 0 0 0 0 0 0

因此,在循环的所有迭代中,您只是更改列表的第一个元素。你实际应该做的是

userData = 10
emptyList = [0] * userData

for i in range(len(emptyList)):
    emptyList[i] = userData
    userData -= 1
print emptyList

<强>输出

[10, 9, 8, 7, 6, 5, 4, 3, 2, 1]

有一个名为range的内置函数,它接受起始值,结束值和增量值,并生成一系列值。使用该功能,您可以在一行中完成此操作

print range(10, 0, -1)  #Python 2
print list(range(10, 0, -1))  #Python 3

答案 1 :(得分:0)

该行:

for i in emptyList:

会给你一个循环,依次为i中的每个值设置emptyList

由于这些值的所有都为零,这意味着i将始终为零,因此它只会更改第一个值。

如果你想要列表[10,9,8,7,6,5,4,3,2,1],只需使用更多Pythonic:

emptylist = [x for x in range (10, 0, -1)]

答案 2 :(得分:0)

也许你正在阅读这样的代码

userData = 10
emptyList = [0] * userData
for i in range(len(emptyList)): # note range and len here
    emptyList[i] = userData
    print(emptyList)
    userData -= 1

你可以使用

emptyList = range(userData, 0, -1)

或者它应该做更多的事情?

答案 3 :(得分:0)

for循环在Python中与其他语言完全不同 - 它更多地用于每个循环(也就是说,对于迭代中的每个元素,都可以使用它)。

如果要创建元素列表,请对Python 2.x使用xrange或对Python 3.x使用range

emptyList = [i for i in xrange(10, 0, -1)]

emptyList = [i for i in range(10, 0, -1)]

答案 4 :(得分:0)

你想要像

这样的东西
for i, j in emptyList:
  emptyList[j] = userData
  userData -= 1

现在你得到值i(你不关心它)和索引j,这就是你需要的。

参见Accessing the index in Python 'for' loops - 你不是第一个在Python中挣扎循环的人!