我有一个元素列表,我输入了一些“可识别的”值,这些值不会转到我的数据库。我想找到并替换这些价值观。代码看起来像这样(试图通用和说明,日期和时间是预定义的变量):
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]
感谢您的帮助。
答案 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上找到有用的讨论。