比较列表中的元素并更改属性

时间:2017-10-04 14:16:45

标签: python list

阿罗哈同志,

我是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更改为“Bigger”

在这一点上,我不知道它应该如何正确发生..所以现在它是一种pseude代码..

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

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

2 个答案:

答案 0 :(得分: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]

答案 1 :(得分: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')