[英]Having trouble understanding List Comprehension in Python
我試圖根據我今天在這里看到的另一個問題來理解列表理解。 我已經自定義並簡化了上一個問題的代碼,因此它並不明顯相同。 我正在嘗試逐步將此代碼轉換為一組傳統的嵌套 for 循環,以幫助我理解它:
employee_records = [('group1', {'values': []}),
('group2',
{'values': [
{'employee': {'name': 'Joseph', 'id': 103, 'displayName': 'Joe'}, 'category': 'Title1'},
{'employee': {'name': 'Robert', 'id': 114, 'displayName': 'Bob'}, 'category': 'Title2'}
]}
),
('group3',
{'values': [
{'employee': {'name': 'Rachel', 'id': 1563, 'displayName': 'Rach'}, 'category': 'title3'}
]}
)]
employee_details = [[nested_list[0], x['employee']['name'], x['category']]
for nested_list in employee_records
for x in nested_list[1]["values"]]
print(employee_details)
output如下:
[['group2', 'Joseph', 'Title1'], ['group2', 'Robert', 'Title2'], ['group3', 'Rachel', 'title3']]
當我將其(根據我的理解)翻譯成一組嵌套的 for 循環時,我得到了不同的結果:
employee_records = [('group1', {'values': []}), ('group2', {'values': [\
{'employee': {'name': 'Joseph', 'id': 103, 'displayName': 'Joe'}, 'category': 'Title1'}, \
{'employee': {'name': 'Robert', 'id': 114, 'displayName': 'Bob'}, 'category': 'Title2'}]}), \
('group3', {'values': [{'employee': {'name': 'Rachel', 'id': 1563, 'displayName': 'Rach'}, 'category': 'title3'}]})]
department = []
for nested_list in employee_records:
for x in nested_list[1]['values']:
department.append([[nested_list][0], x['employee']['name'], x['category']])
print(department)
Output:
[[('group2', {'values': [{'employee': {'name': 'Joseph', 'id': 103, 'displayName': 'Joe'}, 'category': 'Title1'}, {'employee': {'name': 'Robert', 'id': 114, 'displayName': 'Bob'}, 'category': 'Title2'}]}), 'Joseph', 'Title1'], [('group2', {'values': [{'employee': {'name': 'Joseph', 'id': 103, 'displayName': 'Joe'}, 'category': 'Title1'}, {'employee': {'name': 'Robert', 'id': 114, 'displayName': 'Bob'}, 'category': 'Title2'}]}), 'Robert', 'Title2'], [('group3', {'values': [{'employee': {'name': 'Rachel', 'id': 1563, 'displayName': 'Rach'}, 'category': 'title3'}]}), 'Rachel', 'title3']]
當我對此進行故障排除時,我能夠通過將 append 語句更改為更具體地針對第一個元素來獲得預期結果:
employee_records = [('group1', {'values': []}), ('group2', {'values': [\
{'employee': {'name': 'Joseph', 'id': 103, 'displayName': 'Joe'}, 'category': 'Title1'}, \
{'employee': {'name': 'Robert', 'id': 114, 'displayName': 'Bob'}, 'category': 'Title2'}]}), \
('group3', {'values': [{'employee': {'name': 'Rachel', 'id': 1563, 'displayName': 'Rach'}, 'category': 'title3'}]})]
department = []
for nested_list in employee_records:
for x in nested_list[1]['values']:
department.append([[nested_list][0][0], x['employee']['name'], x['category']])
print(department)
Output:
[['group2', 'Joseph', 'Title1'], ['group2', 'Robert', 'Title2'], ['group3', 'Rachel', 'title3']]
為什么在將其重構為嵌套 for 循環時需要將nested_list[0]
更改為nested_list[0][0]
?
你問
為什么我需要將 nested_list[0] 更改為 nested_list[0][0]
但是您的程序不執行nested_list[0]
,而是執行[nested_list][0]
,這只是nested_list
的一種復雜表達方式。
進一步來說,
你的理解是:
employee_details = [
[
nested_list[0],
x['employee']['name'],
x['category']
]
for nested_list in employee_records
for x in nested_list[1]["values"]
]
當你 for 循環正在做的時候:
employee_details = []
for nested_list in employee_records:
for x in nested_list[1]['values']:
employee_details.append([
[nested_list][0], ## <--- extra []
x['employee']['name'],
x['category']
])
我想我發現了你的小問題。
對於您的第一次試用:
for nested_list in employee_records:
for x in nested_list[1]['values']:
department.append([[nested_list][0], x['employee']['name'], x['category']])
print(department)
您正在附加nested_list
變量列表的列表,這實際上導致了不同的 output。只需從nested_list
中刪除列表,您將獲得與列表理解相同的結果。
for nested_list in employee_records:
for x in nested_list[1]['values']:
department.append([nested_list[0], x['employee']['name'], x['category']])
print(department)
列表理解的外部方塊與append([])
的工作方式相同
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.