指数与在另一个中使用一个列表索引不同步

时间:2013-03-16 22:02:33

标签: python

来自R,这很难掌握。从列表中获取元素从位置0开始。 问题是,使用一个列表从另一个列表中选择项目并不是以相同的速度运行。

list1 = [1,2,3,4]

list2 = [1,2,3,4]

for x in range(0, len(list1)):
    print(list1[list2[x]])

这将导致:

>> 2
>> 3
>> 4
>> IndexError: list index out of range

当我在list1的开头添加一个额外的项目,并在list2的末尾添加了一个项目时,问题就会停止(因为它们不像这样同步)。

显然我还不熟悉这种语言,使用一个列表中的值从另一个列表中选择值的正确方法是什么?

这是正确的思考方式吗?

for x in range(0, len(list1)):
    print(list1[list2[x]-1])

2 个答案:

答案 0 :(得分:2)

Python基于0索引。 seq[0]seq中的第一个元素。

R是基于1指数的。

所以,是的,在python中你可以使用

list1 = [1,2,3,4]
list2 = [1,2,3,4]
for x in range(0, len(list2)):
    print(list1[list2[x]-1])
  • 范围应最多为len(list2),而不是len(list1)
  • 此外,range(0, len(list2))range(len(list2))相同。什么时候 range只传递一个参数,它被解释为stop 值,默认情况下采用起始值0。

注意在Python中

for x in range(...):
通常可以避免

,如果是这样,则更可取。相反,你可以写

for item in list2:
    print(list1[item-1])    

item将分配给list2中的每个项目。

答案 1 :(得分:1)

如果您的列表有4个项目,则索引必须从0到3运行,因此使用值4会引发错误。这是一个字母的例子,可能会更清楚:

list1 = [0,2,1,3]
list2 = ['a','a','d','m']

for x in list1:
    print(list2[x]),

=> a d a m