Python中列表中的最短路径
假设我有如下列表:Python中列表中的最短路径,python,Python,假设我有如下列表: a = [0,1,2,3,4,5,6,7,8,9] 假设我有以下选择路径的要求: starting_index = 3 ending_index = 7 这意味着获得从3到7开始的项目,结果是: first_path = [3,4,5,6,7] 假设这是一个循环列表,该路径也可以是: second_path = [7,8,9,0,1,2,3] 在这种情况下,以下方法可以解决问题(最短路径): 但对于以下要求: starting_index = 1 ending_ind
a = [0,1,2,3,4,5,6,7,8,9]
假设我有以下选择路径的要求:
starting_index = 3
ending_index = 7
这意味着获得从3到7开始的项目,结果是:
first_path = [3,4,5,6,7]
假设这是一个循环列表,该路径也可以是:
second_path = [7,8,9,0,1,2,3]
在这种情况下,以下方法可以解决问题(最短路径):
但对于以下要求:
starting_index = 1
ending_index = 8
从指数1到8的结果:
first_path = [1,2,3,4,5,6,7,8]
但另一方面:
second_path = [8,9,0,1]
因此,在这种情况下:
shortest_path = a[1:8]
这并不能解决问题。
如何使这个问题自动化?
谢谢
或者更简洁地说:
sp = a[s_ind:e_ind+1] if len(a) - e_ind + s_ind > e_ind - s_ind else a[e_ind:] + a[:s_ind+1]
例如:
>>> s_ind, e_ind = 3, 7
>>> sp
[3, 4, 5, 6, 7]
s_ind, e_ind = 1, 8
>>> sp
[8, 9, 0, 1]
您可以使用内置的
slice
方法,并且slice
s具有可比性,因此您可以对它们使用min
:
shortest_path = (a+a)[min(slice(start, end+1), slice(end, len(a)+start+1))]
这相当于:
start_to_end = slice(start, end+1)
end_to_start = slice(end, len(a)+start+1)
if start_to_end > end_to_start:
shortest_path = (a+a)[start_to_end]
else:
shortest_path = (a+a)[end_to_start]
shortest_path = (a+a)[min(slice(start, end+1), slice(end, len(a)+start+1))]
start_to_end = slice(start, end+1)
end_to_start = slice(end, len(a)+start+1)
if start_to_end > end_to_start:
shortest_path = (a+a)[start_to_end]
else:
shortest_path = (a+a)[end_to_start]