我有一个字符串列表,并在每个返回字符串的字符串上调用一个函数。我想要的是更新列表中的字符串。我怎么能这样做?
for i in list:
func(i)
函数func()返回一个字符串。我想用这个字符串更新列表。怎么办呢?
答案 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)