为什么 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
如果你想让第一个起作用,也许你可以尝试类似的方法,但这是一种不好的方法,只是将其作为示例展示,这样你可能会更好地理解。您需要该字符串的索引,以便可以在列表中替换它。在您的第一次尝试中,您没有替换列表中的任何内容。
我正在尝试使用此函数将列表中的每个字符串转换为小写格式:
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
如果你想让第一个起作用,也许你可以尝试类似的方法,但这是一种不好的方法,只是将其作为示例展示,这样你可能会更好地理解。您需要该字符串的索引,以便可以在列表中替换它。在您的第一次尝试中,您没有替换列表中的任何内容。