簡體   English   中英

理解Python List Comprehension等價物

[英]Understanding Python List Comprehension equivalent

我有以下代碼:

listOfStrings = ['i_am_exercising', 'python_functional', 'lists_comprehension']
[ "".join([elem.title() for elem in splited]) for splited in [el.split("_")for el in listOfStrings]]

結果是:

['IAmExercising', 'PythonFunctional', 'ListsComprehension']

閱讀文檔 ,我得到了等效的擴展版本,它將第一個表達式放在一個要附加的變量中,第二個表達式放在一個列表中,用for語句進行迭代:

returned = []
for splited in [el.split("_")for el in listOfStrings]: 
            returned.append("".join([elem.title() for elem in splited]))

但如果我想在沒有任何列表理解的情況下編寫相同的代碼,那么最好的方法是什么? 我嘗試使用以下代碼,效果很好:

returned = []
temp = []

for el in listOfStrings:                 
    temp = []                          
    for splited in el.split("_"):       
        temp.append(splited.title())  
    returned.append("".join(temp))

但我沒有完全理解如何做到這一點(將列表理解轉換為等效的完整擴展形式)

你有一個嵌套的列表推導,一個在另一個里面,另外一個用於創建一個拆分元素列表。 您可以將此減少為僅兩個循環:

returned = []
for el in listOfStrings:
    tmp = []
    for splited in el.split("_"):
        tmp.append(splited.title())
    returned.append("".join(tmp))

這簡化了對表單的列表理解:

["".join([splited.title() for splited in el.split("_")]) for el in listOfStrings]

您可以輕松地從外部轉換為內部:

listOfStrings = ['i_am_exercising', 'python_functional', 'lists_comprehension']

result = [ "".join([elem.title() for elem in split]) for split in [el.split("_")for el in listOfStrings]]
print result

result = []
for split in [el.split("_") for el in listOfStrings]:
    result.append("".join([elem.title() for elem in split]))
print result

result = []
temp1 = []
for el in listOfStrings:
    temp1.append(el.split("_"))
for split in temp1:
    result.append("".join([elem.title() for elem in split]))
print result

result = []
temp1 = []
for el in listOfStrings:
    temp1.append(el.split("_"))
for split in temp1:
    temp2 = []
    for elem in split:
        temp2.append(elem.title())
    result.append("".join(temp2))
print result

基本上你只需遵循以下方案:

result = [foo for bar in baz]

變成了

result = []
for bar in baz:
    result.append(foo)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM