如何将嵌套迭代表示为列表推导?

时间:2017-10-29 19:16:03

标签: python

我想使用列表推导而不是使用嵌套的for循环。如何使用列表推导来表示以下结构?

word_list = ['cat','dog','rabbit']
letter_list = [ ]
for a_word in word_list:
    for a_letter in a_word:
        letter_list.append(a_letter)

我试过

letter_list = [letter for letter in word for word in word_list]

但是这会返回错误:

NameError: name 'word' is not defined

这样做的正确方法是什么?谢谢!

1 个答案:

答案 0 :(得分:3)

你必须反过来做这件事:交换迭代

  [letter for word in word_list for letter in word]
#  \_ __/ \_________ _________/ \________ _______/
#    v              v                    v
#  yield       outer loop            inner loop

因此,您需要按照命令式样式定义for循环的顺序定义for循环。过滤器(列表推导中的if s)也是如此。这些也必须以相同的顺序编写。

我们的想法是,如果您从左到右阅读for <pat> in <iter>,则必须在使用这些<iter>之前定义<pat>(例如在 $('.btnEditUser').click(function () { console.log('btn edit user clicked') var rowUser = $(this).parent() var rowUserData = rowUser.find(":input").val() var oForm = new FormData() oForm.append("rowUserData", rowUserData) console.log("oForm", oForm) var sUrl = 'edit-user/' console.log("sUrl ", sUrl); $.post(sUrl, oForm, function (uData) { console.log('SUCCESS') }) }) ** 燕鸥中)。