我正在尝试制作一种算法来解析数字金字塔,例如:
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])
它删除了整个最后一行!
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]