为什么Python会从列表中删除错误的元素?

问题描述 投票:0回答:1

我正在尝试制作一种算法来解析数字金字塔,例如:

75

95 64

17 47 82

18 35 87 10

20 04 82 47 65

19 01 23 75 03 34

88 02 77 73 07 63 67

99 65 04 28 06 16 70 92

41 41 26 56 83 40 80 70 33

41 48 72 33 47 32 37 16 94 29

53 71 44 65 25 43 91 52 97 51 14

70 11 33 28 77 73 17 78 39 68 17 57

91 71 52 38 17 14 91 43 58 50 27 29 48

63 66 04 68 89 53 67 30 73 16 69 87 40 31

04 62 98 27 23 09 70 98 73 93 38 53 60 04 23

算法将从顶部开始,比较最左列和最右列的总和,并删除总和较小的一列。

我的代码如下所示:

`your text`input1="""75
95 64
17 47 82
18 35 87 10
20 04 82 47 65
19 01 23 75 03 34
88 02 77 73 07 63 67
99 65 04 28 06 16 70 92
41 41 26 56 83 40 80 70 33
41 48 72 33 47 32 37 16 94 29
53 71 44 65 25 43 91 52 97 51 14
70 11 33 28 77 73 17 78 39 68 17 57
91 71 52 38 17 14 91 43 58 50 27 29 48
63 66 04 68 89 53 67 30 73 16 69 87 40 31
04 62 98 27 23 09 70 98 73 93 38 53 60 04 23"""


input2=input1.split("\n")
input3=[]
for i in input2:
    a=i.split()
    input3.append(a)


def _rightislarger(list1):
    sum1=0
    sum2=0

    
    for i in list1:
        print("-right path-")
        print(i[0])
        sum1+=int(i[0])
        print("---")
    for i in list1:
        print("-left path-")
        print(i[-1])
        sum2+=int(i[-1])
        print("---")
    print(f"comparing {sum1} with {sum2}")
    if sum1>sum2:
        return True
    else:
        return False

working_list=input3

path1=[]


while len(working_list) > 0:
    print(working_list)
    path1.append(working_list[0][0])
    working_list.remove(working_list[0])
    if _rightislarger(working_list):
        for i in working_list:
            print(f"removing {i[-1]}")
            i.remove(i[-1])
    
    else:
        for i in working_list:
            i.remove(i[0])




path1=list(map(int, path1))

    
print(path1, sum(path1))

在 while 循环第一次迭代之后,列表如下所示:

[['**75**'],
['95', **'64'**], 
['17', '47', **'82'**], 
['18', '35', '87', **'10'**], 
['20', '04', '82', '47', **'65'**], 
['19', '01', '23', '75', '03', **'34'**], 
['88', '02', '77', '73', '07', '63', **'67'**], 
['99', '65', '04', '28', '06', '16', '70', **'92'**], 
['41', '41', '26', '56', '83', '40', '80', '70', **'33'**], 
['41', '48', '72', '33', '47', '32', '37', '16', '94', **'29'**], 
['53', '71', '44', '65', '25', '43', '91', '52', '97', '51', **'14'**], 
['70', '11', '33', '28', '77', '73', '17', '78', '39', '68', '17', **'57'**], 
['91', '71', '52', '38', '17', '14', '91', '43', '58', '50', '27', '29', **'48'**], 
['63', '66', '04', '68', '89', '53', '67', '30', '73', '16', '69', '87', '40', **'31'**], 
['04', '62', '98', '27', *'23'*, '09', '70', '98', '73', '93', '38', '53', '60', '04', **'23'**]]

对此:

[['95'], 
['17', '47'], 
['18', '35', '87'], 
['20', '04', '82', '47'], 
['19', '01', '23', '75', '03'], 
['88', '02', '77', '73', '07', '63'], 
['99', '65', '04', '28', '06', '16', '70'], 
['41', '41', '26', '56', '83', '40', '80', '70'], 
['41', '48', '72', '33', '47', '32', '37', '16', '94'], 
['53', '71', '44', '65', '25', '43', '91', '52', '97', '51'], 
['70', '11', '33', '28', '77', '73', '17', '78', '39', '68', '17'], 
['91', '71', '52', '38', '17', '14', '91', '43', '58', '50', '27', '29'], 
['63', '66', '04', '68', '89', '53', '67', '30', '73', '16', '69', '87', '40'], 
['04', '62', '98', '27', '09', '70', '98', '73', '93', '38', '53', '60', '04', **'23'**]]

如你所见,python 删除了错误的元素。我不明白为什么?

我尝试编写很多打印语句,但我无法弄清楚为什么 python 删除了错误的元素。

我也尝试过将所有元素从 str 转换为 int 但问题仍然存在。

当我尝试这个时:

for i[:] in working_list[:]:
            print(f"removing {i[-1]}")
            i.remove(i[-1])

它删除了整个最后一行!

python-3.x list
1个回答
0
投票
data ="""1
3 2
7 4 3
8 6 5 4"""

data_listed = [i.split(" ") for i in data.split("\n")]

while data_listed:
    left_sum = sum([int(v[0]) for v in data_listed])
    right_sum = sum([int(v[-1]) for v in data_listed])
    
    [data_listed[i].pop(-1) if left_sum > right_sum else data_listed[i].pop(0) for i in range(len(data_listed))]
    data_listed = [x for x in data_listed if x != []]
    [print(d) for d in data_listed]
© www.soinside.com 2019 - 2024. All rights reserved.