繁体   English   中英

Python 嵌套for循环和if语句麻烦

[英]Python nested for loop and if statement trouble

我正在寻找满足以下条件的列表字典:list1 中的 Item0 == list2 中的 Item0 和 list1 中的 Item1 == list2 中的 Item1 和 list1 中的 Date2 < list2 中的 Date2。

按原样运行代码会在字典中给出一个列表。 即使我将 if 语句更改为 > 而不是 <,一个列表也是相同的。

在此之前的所有内容(见下文)看起来都是正确的:“for li in Liststr2: for lr in Liststr1A: if lr[0] == li[0] and lr[1] == li[1] and lr[2] >李[2]:“

如果有所不同,“lr[2] & li[2]”也是 dtype <M8[ns]。

df = {'Position': {0: 1, 1: 2, 2: 1, 3: 2, 4: 1, 5: 2, 6: 1, 7: 2, 8: 1, 9: 1, 10: 1, 11: 2, 12: 1, 13: 2, 14: 1, 15: 2, 16: 1, 17: 2, 18: 1, 19: 2, 20: 1}, 'Location': {0: 'AB1', 1: 'AB2', 2: 'AB3', 3: 'AB4', 4: 'AB4', 5: 'AB4', 6: 'AB4', 7: 'AB4', 8: 'AB4', 9: 'AB2', 10: 'AB5', 11: 'AB4', 12: 'AB4', 13: 'AB6', 14: 'AB6', 15: 'AB6', 16: 'AB6', 17: 'AB6', 18: 'AB6', 19: 'AB1', 20: 'AB1'}, 'DATE': {0: Timestamp('2021-05-22 18:00:00'), 1: Timestamp('2021-05-21 13:00:00'), 2: Timestamp('2021-05-24 12:23:00'), 3: Timestamp('2021-05-23 12:25:00'), 4: Timestamp('2021-05-23 12:25:00'), 5: Timestamp('2021-05-23 12:25:00'), 6: Timestamp('2021-05-23 12:25:00'), 7: Timestamp('2021-05-23 12:25:00'), 8: Timestamp('2021-05-23 12:25:00'), 9: Timestamp('2021-05-21 18:00:00'), 10: Timestamp('2021-05-21 18:00:00'), 11: Timestamp('2021-05-24 14:08:00'), 12: Timestamp('2021-05-24 14:08:00'), 13: Timestamp('2021-05-24 16:35:00'), 14: Timestamp('2021-05-24 16:35:00'), 15: Timestamp('2021-05-24 16:35:00'), 16: Timestamp('2021-05-24 16:35:00'), 17: Timestamp('2021-05-24 19:48:00'), 18: Timestamp('2021-05-24 19:48:00'), 19: Timestamp('2021-05-25 23:45:00'), 20: Timestamp('2021-05-25 23:45:00')}, 'Item Numbers': {0: '788-33', 1: '07-1', 2: '5214-3', 3: '003', 4: '003', 5: '009J', 6: '009J', 7: '009J', 8: '009J', 9: '07-1', 10: '68-302', 11: '6-5213', 12: '6-5214', 13: '1-801', 14: '1-801', 15: '1-801', 16: '1-801', 17: '4-008', 18: '4-008', 19: 'A-001', 20: 'A-001'}}
finaltemp = []
Finallist = {}
str1Temp = []
str2Temp = []
NaValues = []
Liststr2 = []
Liststr1 =  []
Listna = []
n = 0

for col, row in df.iterrows() :
    col1Temp = row['col1']
    col2Temp = row['col2']
    col3temp = row['col3']
    col4Temp = row['col4']
    if col4Temp == None:
        NaValues = [col1Temp, col3temp, col2Temp]
        Listna.append(NaValues)
    if col4Temp == 'str1':
        str1Temp = [col1Temp, col3temp, col2Temp]
        Liststr1.append(str1Temp)
    if col4Temp == 'str2':
        str2Temp = [col1Temp, col3temp, col2Temp]
        Liststr2.append(str2Temp)
    for li in Liststr2:
        for lr in Liststr1:
            if lr[0] == li[0] and lr[1] == li[1] and lr[2] > li[2]:
                finaltemp = [lr[0], lr[1], lr[2]]
                n = +1    
                key = 'Bad' + str(n)
                def t() : return {key : finaltemp}
                Finallist.update(t())
print(Finallist)

这简化了你的最终循环,正如我所说,它应该在左边距,而不是缩进一步:

Liststr1A = Liststr1[:10]
for li in Liststr2:
    for lr in Liststr1A:
        if lr[0] == li[0] and lr[1] == li[1] and lr[2] > li[2]:
            Finallist['Bad'+str(len(FinalList)+1)] = lr[:]
print(Finallist)

我不清楚为什么你希望Finallist成为字典,因为你想要递增键。 为什么不把它列成一个列表并使用Finallist.append呢?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM