为什么 sequence for 循环似乎在 Python 中效果不佳?

Why do sequence for loops don't seem to work well in Python?

我正在尝试使用此函数将列表中的每个字符串转换为小写格式:

def lower_list(strings):
    for string in strings:
        string = string.lower()
    return strings

但是这个实现不起作用,但是当使用 range 函数并且我使用索引进行迭代时:

def lower_list(strings):
    for i in range(len(strings)):
        strings[i] = strings[i].lower()
    return strings

我确实将列表中的每个元素都转换为小写:

> print(lower_list(mylist))
['oh brother where art thou', 'hello dolly', 'monsters inc', 'fargo']

但是在第一个实现中我得到了带有大写值的原始列表,我是否遗漏了一些关于 for 循环如何工作的重要信息?

在第一种情况下,您所做的只是将小写值存储在变量中,但列表未受影响。 在第二种情况下,您实际上是在更新列表中该索引处的值。

您也可以在此处使用 lambda 函数:

def lower_list(strings):
    return list(map(lambda x: x.replace(x, x.lower()), strings))

列表理解是最简单最好的:

def lower_list(strings):
    return [string.lower() for string in strings]

第一个不起作用的原因是它实际上并没有修改列表中的值,而只是影响列表中值的副本。当您使用 index-based 函数时,它会修改列表本身。

def lower_list(strings):
    for string in strings:
        index_of_string = strings.index(string)
        string = string.lower()
        strings[index_of_string] = string
    return strings

如果你想让第一个起作用,也许你可以尝试类似的方法,但这是一种不好的方法,只是将其作为示例展示,这样你可能会更好地理解。您需要该字符串的索引,以便可以在列表中替换它。在您的第一次尝试中,您没有替换列表中的任何内容。