首页 > 解决方案 > Incorrect element returned from list

问题描述

I am attempting to slice a list. When I iterate through the nested list one result has the correct elements corresponding to the index, the other result is one prior to the index number.

  [[['LIN', '', 'GS', 'MERN09RO3/8', 'MF', 'MERCIER', 'ST', 'MERN09RO3/8'], ['DTM', '007', '20201025'], ['REF', '19', '', 'JAECKLE DISTRIBUTORS INC.'], ['PID', 'F', 'TRN', '', '', 'NOSING RED OAK 3/8 X 92'], ['PID', 'F', 'MAC', '', '', 'WOOMSN'], ['MEA', '', 'SU', '1.000', 'EA'], ['CTP', '', 'LPR', '112.000', '', 'EA'], ['G43', '003', '', 'INVENTORY'], ['SLN', '1', '', 'O', '', '', '', '', '', 'SK', 'MERMARONO8300M', '', '', '', '', 'ST', 'MERN09RO3/8'], ['PID', 'F', '73', '', '', 'NATURAL MATTE'], ['PID', 'F', '35', '', '', 'MARONO8300M'], ['DTM', '197', '20201019'], ['SLN', '2', '', 'O', '', '', '', '', '', 'SK', 'MERMARONO8312F', '', '', '', '', 'ST', 'MERN09RO3/8'], ['PID', 'F', '73', '', '', 'GUNSTOCK SEMI-GLOSS'], ['PID', 'F', '35', '', '', 'MARONO8312F'], ['DTM', '197', '20201019'], ['SLN', '3', '', 'O', '', '', '', '', '', 'SK', 'MERMARONO8324F', '', '', '', '', 'ST', 'MERN09RO3/8'], ['PID', 'F', '73', '', '', 'AUTUMN LEAF SEMI-GLOSS'], ['PID', 'F', '35', '', '', 'MARONO8324F'], ['DTM', '197', '20201019'], ['SLN', '4', '', 'O', '', '', '', '', '', 'SK', 'MERMARONO8386F', '', '', '', '', 'ST', 'MERN09RO3/8'], ['PID', 'F', '73', '', '', 'BROOKLINE SEMI-GLOSS'], ['PID', 'F', '35', '', '', 'MARONO8386F'], ['DTM', '197', '20201019']], [['LIN', '', 'GS', 'MERP08N18', 'MF', 'MERCIER', 'ST', 'MERP08N18'], ['DTM', '007', '20201025'], ['REF', '19', '', 'JAECKLE DISTRIBUTORS INC.'], ['PID', 'F', 'TRN', '', '', 'PRO ENGINEERED RED OAK 3/8 X 3-1/4'], ['PID', 'F', 'MAC', '', '', 'WOOENP'], ['MEA', '', 'SW', '1.273', 'FP'], ['MEA', '', 'SU', '44.000', 'SF'], ['CTP', '', 'LPR', '4.390', '', 'SF'], ['G43', '003', '', 'INVENTORY'], ['SLN', '1', '', 'O', '', '', '', '', '', 'SK', 'MERMEOPPA8300B', 'UP', '77816797014', '', '', 'ST', 'MERP08N18'], ['PID', 'F', '73', '', '', 'NATURAL MATTE-BRUSHED'], ['PID', 'F', '35', '', '', 'MEOPPA8300B'], ['PID', 'F', '08', '', '', 'MERMAROTHSS00M'], ['PID', 'F', '08', '', '', 'MERMAROQRSS00M'], ['DTM', '197', '20201023'], ['SLN', '2', '', 'O', '', '', '', '', '', 'SK', 'MERMEOPPA8380F', '', '', '', '', 'ST', 'MERP08N18'], ['PID', 'F', '73', '', '', 'MOCASSIN PRO-FINISH'], ['PID', 'F', '35', '', '', 'MEOPPA8380F'], ['DTM', '197', '20201019'], ['SLN', '3', '', 'O', '', '', '', '', '', 'SK', 'MERMEOPPA8383F', 'UP', '77816795616', '', '', 'ST', 'MERP08N18'], ['PID', 'F', '73', '', '', 'CONCRETE GREY PRO-FINISH'], ['PID', 'F', '35', '', '', 'MEOPPA8383F'], ['PID', 'F', '08', '', '', 'MERMARONO8383F'], ['PID', 'F', '08', '', '', 'MERMAROTM8383F'], ['PID', 'F', '08', '', '', 'MERMAROTHSS83F'], ['DTM', '197', '20201019']]]

This is the code used to iterate through the list. It looks for "CTP" and "G43" in the nested lists then indexes them.

x = 0
details = [[['LIN', '', 'GS', 'MERN09RO3/8', 'MF', 'MERCIER', 'ST', 'MERN09RO3/8'], ['DTM', '007', '20201025'], ['REF', '19', '', 'JAECKLE DISTRIBUTORS INC.'], ['PID', 'F', 'TRN', '', '', 'NOSING RED OAK 3/8 X 92'], ['PID', 'F', 'MAC', '', '', 'WOOMSN'], ['MEA', '', 'SU', '1.000', 'EA'], ['CTP', '', 'LPR', '112.000', '', 'EA'], ['G43', '003', '', 'INVENTORY'], ['SLN', '1', '', 'O', '', '', '', '', '', 'SK', 'MERMARONO8300M', '', '', '', '', 'ST', 'MERN09RO3/8'], ['PID', 'F', '73', '', '', 'NATURAL MATTE'], ['PID', 'F', '35', '', '', 'MARONO8300M'], ['DTM', '197', '20201019'], ['SLN', '2', '', 'O', '', '', '', '', '', 'SK', 'MERMARONO8312F', '', '', '', '', 'ST', 'MERN09RO3/8'], ['PID', 'F', '73', '', '', 'GUNSTOCK SEMI-GLOSS'], ['PID', 'F', '35', '', '', 'MARONO8312F'], ['DTM', '197', '20201019'], ['SLN', '3', '', 'O', '', '', '', '', '', 'SK', 'MERMARONO8324F', '', '', '', '', 'ST', 'MERN09RO3/8'], ['PID', 'F', '73', '', '', 'AUTUMN LEAF SEMI-GLOSS'], ['PID', 'F', '35', '', '', 'MARONO8324F'], ['DTM', '197', '20201019'], ['SLN', '4', '', 'O', '', '', '', '', '', 'SK', 'MERMARONO8386F', '', '', '', '', 'ST', 'MERN09RO3/8'], ['PID', 'F', '73', '', '', 'BROOKLINE SEMI-GLOSS'], ['PID', 'F', '35', '', '', 'MARONO8386F'], ['DTM', '197', '20201019']], [['LIN', '', 'GS', 'MERP08N18', 'MF', 'MERCIER', 'ST', 'MERP08N18'], ['DTM', '007', '20201025'], ['REF', '19', '', 'JAECKLE DISTRIBUTORS INC.'], ['PID', 'F', 'TRN', '', '', 'PRO ENGINEERED RED OAK 3/8 X 3-1/4'], ['PID', 'F', 'MAC', '', '', 'WOOENP'], ['MEA', '', 'SW', '1.273', 'FP'], ['MEA', '', 'SU', '44.000', 'SF'], ['CTP', '', 'LPR', '4.390', '', 'SF'], ['G43', '003', '', 'INVENTORY'], ['SLN', '1', '', 'O', '', '', '', '', '', 'SK', 'MERMEOPPA8300B', 'UP', '77816797014', '', '', 'ST', 'MERP08N18'], ['PID', 'F', '73', '', '', 'NATURAL MATTE-BRUSHED'], ['PID', 'F', '35', '', '', 'MEOPPA8300B'], ['PID', 'F', '08', '', '', 'MERMAROTHSS00M'], ['PID', 'F', '08', '', '', 'MERMAROQRSS00M'], ['DTM', '197', '20201023'], ['SLN', '2', '', 'O', '', '', '', '', '', 'SK', 'MERMEOPPA8380F', '', '', '', '', 'ST', 'MERP08N18'], ['PID', 'F', '73', '', '', 'MOCASSIN PRO-FINISH'], ['PID', 'F', '35', '', '', 'MEOPPA8380F'], ['DTM', '197', '20201019'], ['SLN', '3', '', 'O', '', '', '', '', '', 'SK', 'MERMEOPPA8383F', 'UP', '77816795616', '', '', 'ST', 'MERP08N18'], ['PID', 'F', '73', '', '', 'CONCRETE GREY PRO-FINISH'], ['PID', 'F', '35', '', '', 'MEOPPA8383F'], ['PID', 'F', '08', '', '', 'MERMARONO8383F'], ['PID', 'F', '08', '', '', 'MERMAROTM8383F'], ['PID', 'F', '08', '', '', 'MERMAROTHSS83F'], ['DTM', '197', '20201019']]]
index1 = []
loop2200 = []
while x < len(details):
    y = 0
    for identifier in details[x]:
        if identifier[0] == "CTP":
            index1.append(y)
        if identifier[0] == "G43":
            index1.append(y)
        y += 1
    loop2200.append(details[x][index1[0]:index1[1] + 1])
    x += 1

for line in loop2200:
print(line)

print(index1)

The output of the above code is

    [['CTP', '', 'LPR', '112.000', '', 'EA'], ['G43', '003', '', 'INVENTORY']]
    [['MEA', '', 'SU', '44.000', 'SF'], ['CTP', '', 'LPR', '4.390', '', 'SF']]
        
    [6, 7, 7, 8]

Once the indexes are stored in another list, I use that list to slice the original list. The output i would like to see is

    [['CTP', '', 'LPR', '112.000', '', 'EA'], ['G43', '003', '', 'INVENTORY']]
    [['CTP', '', 'LPR', '4.390', '', 'SF'], ['G43', '003', '', 'INVENTORY']]

标签: pythonlist

解决方案


您总是附加到loop2200using index1[0]and index1[1],但新的索引被附加到index1:将这些更改为index1[-2]and index1[-1](即使用添加到的最后两个索引index1),这将loop2200正确更新。


推荐阅读