簡體   English   中英

使用迭代器(Python)在循環內定義和追加新列表

[英]Defining and appending in new list inside a loop using iterator (python)

我正在嘗試使用迭代器在循環內啟動並添加新列表。 我試圖從這個答案中使用字典的主意。

這是我的代碼段,您可以忽略代碼的詳細信息。 如果滿足if條件,則需要在特定列表中附加i值,這將類似於patch12,patch53等:

import math as m

d = {}

for i in range(0,10):

     for j in range(0, 10):

          if((m.floor(vector[upper_leaflet[i],0:1]) <= xx[j][0]) & (m.floor(vector[upper_leaflet[i],0:1]) < yy[j][0])):

              d["patch{}{}".format(xx[j][0],yy[j][0])].append(i)

如果我打印patch52 = [ 1, 5, 9 ,10]輸出應該類似於執行此操作的正確方法是什么?

您正在嘗試創建名稱為patch12或patch53等的動態變量。這不能僅通過格式化字符串來完成。 看看這個線程,其中動態變量創建解釋。

但是,這不是一個好的編程習慣。 正確的解決方案可能是使用詞典或列表。 例:

patches = {}
for i in range(0,10):

     for j in range(0, 10):

          if((m.floor(vector[upper_leaflet[i],0:1]) <= xx[j][0]) & (m.floor(vector[upper_leaflet[i],0:1]) < yy[j][0])):

              key_name = "patch{}{}".format(xx[j][0],yy[j][0])
              #if key already exists, append to that list, if not create new list
              if key_name in patches:
                    key_value = patches[key_name]
              else:
                    key_value = []
              #appending newly value ..
              key_value.append(i)
              patches[key_name] = key_value

此外,在程序中需要使用此數據時,您可以遍歷字典以找出所有密鑰,例如:

for patch in patches:
    do something...

或者你可以在特定的鍵(例如直接訪問值: patch52通過

value = patches['patch52'] 

這將為您提供與patch52 ex對應的值的列表:

print(patches['patch52'])
[1,4,7,9]

使用collections.defaultdict使事情變得更容易:

import math as m
from collections import defaultdict

d = defaultdict(list)
for i in range(0,10):
     for j in range(0, 10):
          if ((m.floor(vector[upper_leaflet[i],0:1]) <= xx[j][0]) & (m.floor(vector[upper_leaflet[i],0:1]) < yy[j][0])):
              d["patch{}{}".format(xx[j][0],yy[j][0])].append(i)

暫無
暫無

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

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