访问列表的元素

时间:2014-04-23 06:41:02

标签: python

我有一个字符串列表,并在每个返回字符串的字符串上调用一个函数。我想要的是更新列表中的字符串。我怎么能这样做?

for i in list:
     func(i)

函数func()返回一个字符串。我想用这个字符串更新列表。怎么办呢?

4 个答案:

答案 0 :(得分:3)

您可以使用列表推导重建列表,例如

list_of_strings = [func(str_obj) for str_obj in list_of_strings]

或者,您可以像这样使用内置map功能

list_of_strings = map(func, list_of_strings)

注意:如果您使用的是Python 3.x,那么您需要明确地将map对象转换为列表,就像这样

list_of_strings = list(map(func, list_of_strings))

注1:您不必担心旧列表及其内存。当您通过赋值变量list_of_strings来引用新列表时,旧列表的引用计数减少1.当引用计数降为0时,它将自动被垃圾收集。

答案 1 :(得分:3)

如果您需要更新列表(不创建新列表来替换它),您需要获得与您从循环中获得的每个项目对应的索引。最简单的方法是使用内置的enumerate函数:

for index, item in enumerate(lst):
    lst[index] = func(item)

答案 2 :(得分:2)

首先,不要调用列表list(这是内置列表构造函数)。

做出你想要的最恐怖的方式是列表理解:

lst = [func(i) for i in lst]

或者您可以创建一个新列表:

lst2 = []
for i in lst:
    lst2.append(func(i))

你甚至可以改变列表

for n, i in enumerate(lst):
    lst[n] = func(i)

注意:大多数程序员会因上面的循环中调用列表项i而感到困惑,因为i通常用作循环索引计数器,我只是在这里使用它来保持一致性。< / p>

你应该习惯第一个版本,从现在起六个月后回到代码时,你会更容易理解。

稍后您可能还想使用生成器......

g = (func(i) for i in lst)
lst = list(g)

答案 3 :(得分:1)

您可以使用map()来执行此操作。

map(func, list)