1

来自 R,这很难掌握。从列表中获取元素以 position 开头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])
4

2 回答 2

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

于 2013-03-16T22:06:35.520 回答
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
于 2013-03-16T22:06:50.390 回答