我想了解在python或pythonic中扁平化嵌套列表的两种代码结果的差异。也许我在Python代码上犯了一个错误,但如果我没有,有人能解释结果的差异吗?以下代码:
nested_list = [['rodrigo'],['fernanda','lorena','marcela'],['carolina'],['marcio','cristina','patricia','regina']]
# Regular programing
flat_list = []
for list in nested_list:
for element in list:
flat_list.append(element)
print(flat_list)
# Results: ['rodrigo', 'fernanda', 'lorena', 'marcela', 'carolina', 'marcio', 'cristina', 'patricia', 'regina']
# Pythonic
flat_list = [element for element in list for list in nested_list]
print(flat_list)
# Results: ['marcio', 'marcio', 'marcio', 'marcio', 'cristina', 'cristina', 'cristina', 'cristina', 'patricia',
# 'patricia', 'patricia', 'patricia', 'regina', 'regina', 'regina', 'regina']```
您的第二个代码通过"事故;因为您继续使用第一个解决方案中定义的名称list
,因此它表示输入的最后行。
它实际上是这样做的:
flat_list = []
for element in list:
for list in nested_list:
flat_list.append(element)
print(flat_list)
如果您将list
更改为mylist
(一个尚未使用的名称(,您会看到您的代码和此解释性代码都会遇到错误。
您的第二个解决方案应该按相反的顺序执行:
flat_list = [element for lst in nested_list for element in lst]
此外,使用Python(list
(已经使用过的名称也不是一个好主意。