2017-10-04 97 views
0

阿羅哈同志,比較列表中的元素和屬性的變化

我是一個新的到Python,所以我很抱歉,如果有的話/行動是非常愚蠢的..

所以,我的任務是比較一個列表中的元素。 如果元素1大於元素2,我想標記它並繼續比較其他元素與元素1(?Element1> Element3)...

在這一點上,我正在創建一個簡單的類與我的過程:

processList = [] 
class Process: 


def __init__(self, id, recvMsg): 
    self.id = id 
    self.recvMsg = recvMsg 

現在我生成過程進入名單..:

def CreateProcess(): 
    processList.append(Process(0,"NULL")) 
    processList.append(Process(2,"NULL")) 
    processList.append(Process(4,"NULL")) 
    processList.append(Process(7,"NULL")) 
    processList.append(Process(10,"NULL")) 

,並在最後一步,我想比較每個元素的ID的,如果一個又一個元素是一個更大的比元素1,我想改變他的recvMsg 「做大」

在這一點上,我不知道應該如何正確地發生。所以現在它是一種的pseude代碼..

for (j = 1; j < len(processList); j++) 

     if processList[0].id < processList[j].id 
      processList[j].recvMsg = "IsBigger" 
+0

所以,你只希望一切僅在第一個元素比較? – HyperNeutrino

回答

0

您可以使用reduce。這是Python 2中的內建函數,但您需要在Python 3中從functools導入它(即from functools import reduce)。

def compare(a, b): 
    if a.id < b.id: 
     b.msg = 'IsBigger' 
    return a 

reduce(compare, processList) 

然後,您可以檢查:

>>> for proc in processList: 
...  print((proc.id, proc.msg)) 
... 
(0, 'NULL') 
(2, 'bigger') 
(4, 'bigger') 
(7, 'bigger') 
(10, 'bigger') 
0

for循環

for環你看起來像你是某種Java/JS/C程序員。使用此循環:

for j in range(1, len(processlist)): 
    if processList[0].id < processList[j].id: 
      processList[j].recvMsg = "IsBigger" 

您可以這樣做。 range(x, y)是發電機,當遍歷將通過所有整數開始x和結束前右y(所以list(range(1, 5))[1, 2, 3, 4]