![](/img/trans.png)
[英]how to take multiple outputs from a loop to outside in python(netmiko)
[英]Python take modified list outside for loop
我一直致力於制作元組列表並找到每個元組的平均值。
myList = [(1,2,3),(4,12,6)]
def GS(myList):
for miniList in myList:
r = miniList[0]
g = miniList[1]
b = miniList[2]
GS = round((r+g+b)/3,2)
miniList = list(miniList)
miniList[0] = GS
miniList[1] = GS
miniList[2] = GS
miniList = tuple(miniList)
return myList
print(GS(myList))
我的清單是[(1,2,3),(4,12,6)]
我應該得到每個元組的平均值並替換三個元組
輸出: [(2.0,2.0,2.0),(7.33,7.33,7.33)]
您可以使用列表理解。 下面的示例避免了通過map
和zip
迭代器計算每個元組的長度兩次。
myList = [(1,2,3),(4,12,6)]
def GS(L):
lens = map(len, L)
res = [(sum(i)/i_len,)*i_len for i, i_len in zip(L, lens)]
return res
print(GS(myList))
[(2.0, 2.0, 2.0), (7.333333333333333, 7.333333333333333, 7.333333333333333)]
如果您希望舍入小數,可以使用:
res = [(round(sum(i)/i_len, 2),)*i_len for i, i_len in zip(L, lens)]
myList = [(1,2,3),(4,12,6)]
[(round(sum(e)/len(e)),)*len(e) for e in myList]
# [(2.0, 2.0, 2.0), (7.33, 7.33, 7.33)]
問題是在你的for
循環中,你寫道:
for miniList in myList:
# ...
miniList = tuple(miniList)
你在這里似乎想通過引用分配 。 但這在Python中是不可能的(或者至少沒有這種語法)。
但是,您可以使用例如索引,並執行它:
def GS(myList):
for idx, miniList in enumerate(myList):
r = miniList[0]
g = miniList[1]
b = miniList[2]
GS = round((r+g+b)/3,2)
miniList = list(miniList)
miniList[0] = GS
miniList[1] = GS
miniList[2] = GS
myList[idx] = tuple(miniList)
return myList
話雖如此,這是一個相當復雜的方法。 你可以使用例如:
def GS(myList):
for idx, miniList in enumerate(myList):
miniList[idx] = (round(sum(miniList)/len(miniList), 2),) * len(miniList)
return myList
這也適用於包含多於或少於三個元素的元組。 我們要做的就是計算sum(..)
中的miniList
,並除以該len(..)
中的miniList
獲得的平均值。 然后我們像原始函數一樣使用round(.., 2)
函數。
接下來,我們將它包裝在單個元組中 ,使用(.., )
,然后我們將它與元組的長度相乘,以獲得一個元組,我們在單元組元組len(miniList)
重復元素。
話雖如此,構建新列表然后更改現有列表通常更Pythonic 。 由於其他變量可能引用此列表,現在也會更新。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.