如何引用列表中的元素?

时间:2014-03-19 16:12:15

标签: python list reference element

我如何引用该列表中列表中的元素?例如,

settings = ["Exposure", "0", random_time(settings[0])]

第三个元素引用第一个元素。我可以详细说明“曝光”,但我试图设置它,以便即使第一个元素被改变,第三个元素随之改变。

修改 我想也许我的问题不够明确。每个使用泛型函数“random_time”将有多个设置,因此需要传递设置的关键字。对第一个元素的引用是这样的,我只需要在一个地方修改代码。脚本运行后,此值不会更改。

我将尝试使用设置列表引用的关键字列表。

4 个答案:

答案 0 :(得分:2)

首先评估右手表达,因此在评估

["Exposure", "0", random_time(settings[0])]

尚未定义变量settings

一个小例子:

a = 1 + 2

首先1 + 2进行评估,结果为3,经过评估,然后完成分配:

a = 3

你可以处理这个问题的一种方法是存储"更改"字符串到变量:

var1 = "Exposure"
settings = [var1 , "0", random_time(var1)]

这将在列表定义中起作用,但如果在声明列表settings后,您更改var1,则不会更改其第三个元素。如果您希望这样做,您可以尝试实现一个类Settings,这将更加灵活。

答案 1 :(得分:1)

AFAIK你不能。这对于大多数编程语言来说都很常见,因为当您运行功能时,该项目尚未完全创建。

答案 2 :(得分:1)

你不能直接。

但是,您可以同时引用其他内容,并使用其中的属性。

class SettingObj:
    name = "Exposure"

settings = [SettingObj, "0", random_time(SettingObj)]

现在,更改您使用settings列表的方式,以便查找列表中第1和第3项的name属性。

答案 3 :(得分:0)

正如其他人告诉你的那样,你选择的语法会在创建之前尝试引用设置,因此它不起作用(除非设置已经存在,因为在前一行上为其分配了另一个对象)。 / p>

更重要的是,在Python中,将字符串分配给两个位置不会使它在一个地方更改它会在另一个地方更改它。这适用于所有形式的绑定,包括变量名称,列表和对象属性。

字符串在Python中是不可变的 - 它们不能被更改,只能被重新绑定。并且重新绑定一次只影响单个名称(或列表位置等)。这与C不同,其中两个名称可以包含引用内存中相同位置的指针,您可以在内存中编辑该位置并影响这两个位置。

如果你真的需要这样做,你可以将字符串包装在一个对象中(可能是自定义类)。您甚至可以使对象的界面在所有方面看起来都像一个字符串,除了它不是字符串原语,而是具有绑定到字符串的属性(比如contents)的对象。然后,当您想要更改字符串时,重新绑定对象的属性(即obj.contents或其他)。由于您没有重新分配绑定到对象本身的名称,而只是对象内部的名称,它将在两个位置都发生更改。

在这种特殊情况下,你不仅在两个地方都有相同的字符串,但实际上你在第一个位置有一个字符串,但是在第三个位置对字符串执行了一个函数的结果。因此,即使您使用对象包装器,它也不会像您希望的那样工作,因为每次都需要重新运行该函数。

有一些方法来设计你的程序,这不是一个问题,但如果不了解你的最终目标,我就不能说它们是什么。