Python - 查找匹配条件的列表中的下一个元素。替换上一个条目

时间:2015-06-06 02:00:12

标签: python

我有一个元素列表,我输入了一些“可识别的”值,这些值不会转到我的数据库。我想找到并替换这些价值观。代码看起来像这样(试图通用和说明,日期和时间是预定义的变量):

A = []
A.append(['Name1',date1,time1,0.00])
A.append(['Name1',date1,time2,0.00])
A.append(['Name2',date1,time1,price1])
A.append(['Name1',date1,time3,price2])
A.append(['Name1',date1,time4,price3])
A.append(['Name1',date2,time5,price4])

等等。这个0.00价格应该由下一个价格改变,我们在第0位有'Name1',在第1位有date1,即:

print(A[0])
print(A[1])

应该产生

['Name1',date1,time1,price1]
['Name1',date1,time2,price1] 

感谢您的帮助。

3 个答案:

答案 0 :(得分:2)

尝试使用此代码进行打印,传递相同的列表和索引。

def print1(lists, index):
    if lists[index][3] == 0:
            try:
                    name=lists[index][0]
                    val = next(l[3] for l in lists[index:] if l[3]>0 and l[0]==name)
                    print lists[index][:-1] + [val]
            except:
                    print "No value found with same name where price>0"
    else:
            print lists[index]

A=[]
A.append(['Name1','date1','time1',0.00])
A.append(['Name1','date1','time2',0.00])
A.append(['Name2','date1','time1',10])
A.append(['Name1','date1','time3',20])
A.append(['Name1','date1','time4',30])
A.append(['Name1','date2','time5',40])
print1(A,1)

您可以返回值代替打印它们,以备不时之需。

答案 1 :(得分:0)

您可能需要这样的方法:

A = []
def insert_or_update_by_name_and_date(x):
    if not isinstance(x, list) or len(x) < 2:
        return
    for element in A:
        if len(element) < 2:
            continue
        if element[0] == x[0] and element[1] == x[1]:
            element[2] = x[2]
            element[3] = x[3]
            return
    A.append(x)

答案 2 :(得分:0)

您可以使用两个for循环:

for i in range(len(A)):
    for j in range(i, len(A)):
        if A[i][3] == 0.0 and A[j]]0] == 'Name1' and A[j][1] == date1:
            A[i][3] = A[j][3]

除此之外,您可以在when to use a Dictionary, List or Set上找到有用的讨论。