[英]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.