簡體   English   中英

如何將列表推導轉換為嵌套循環?

[英]How to convert a list comprehension to a nested loop?

我正在查看一些 Python 代碼,並在代碼中找到了這一行:

data = [[int(x) for x in list] for list in values]  

此代碼基本上將字符串轉換為嵌套列表值中的整數。 例如:

values = [['8', '1', '1', '0', '1', '1', '0', '0'], ['9', '0', '0', '1', '0', '0', '1', '0']] 

output 變為:

data = [[8, 1, 1, 0, 1, 1, 0, 0], [9, 0, 0, 1, 0, 0, 1, 0]]

此時的 for 循環是一個嵌套的 for 循環,它看起來“復雜”,如果我想將其轉換為“常規”for 循環,那么它變得更容易遵循但仍然可以完成相同的工作怎么辦? 那個代碼會是什么樣子?

 data = [[int(x) for x in list] for list in values] 

這個片段是一個列表理解,要使用你必須做的 for 循環:

data[]
for list in values:
    y = []
    for x in list:
         y.append(int(x))
    data.append(y)

在評論中找到解釋

#data = [[int(x) for x in list] for list in values]  
values = [['8', '1', '1', '0', '1', '1', '0', '0'], ['9', '0', '0', '1', '0', '0', '1', '0'], ['10', '0', '0', '1', '0', '0', '1', '0'], ['11', '0', '0', '0', '0', '0', '0', '0'], ['12', '0', '0', '0', '0', '0', '0', '0'], ['13', '0', '0', '0', '0', '0', '0', '0'], ['14', '0', '0', '0', '0', '0', '0', '0'], ['15', '0', '0', '0', '0', '0', '0', '0'], ['16', '0', '0', '0', '1', '0', '2', '3'], ['17', '1', '1', '2', '0', '1', '1', '0'], ['18', '1', '0', '0', '2', '1', '1', '2']] 

# it is similar to 
final_list = []
for list_ in values:
    # iterate over the values
    temp = []
    for c in list_:
        temp.append(int(c))
    final_list.append(temp) # be cautious you can caught with shallow copy sometime, safe side use final_list.append(temp.copy())
    
print(final_list)
[[8, 1, 1, 0, 1, 1, 0, 0], [9, 0, 0, 1, 0, 0, 1, 0], [10, 0, 0, 1, 0, 0, 1, 0], [11, 0, 0, 0, 0, 0, 0, 0], [12, 0, 0, 0, 0, 0, 0, 0], [13, 0, 0, 0, 0, 0, 0, 0], [14, 0, 0, 0, 0, 0, 0, 0], [15, 0, 0, 0, 0, 0, 0, 0], [16, 0, 0, 0, 1, 0, 2, 3], [17, 1, 1, 2, 0, 1, 1, 0], [18, 1, 0, 0, 2, 1, 1, 2]]

當前的循環架構將如下所示:

data = []
for word in values:
    nested_list = []
    for x in word:
        nested_list.append(int(x))
    data.append(nested_list)

我建議使用列表理解並盡量避免使用保留關鍵字(如 list、if、elif)命名變量

我看到已經有准備好的答案,但嘗試過)

暫無
暫無

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

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