get_plan=
[('Depot', 'Addr_3'),
('Addr_3', 'Addr_4'),
('Addr_4', 'Depot'),
('Depot', 'Addr_1'),
('Addr_1', 'Addr_2'),
('Addr_2', 'Depot'),
('Depot', 'Addr_5'),
('Addr_5', 'Addr_6'),
('Addr_6', 'Depot')]我怎样才能把这个计划转变成这样的路线列表(一种解决方案,每条路线都在仓库结束,另一条路线从仓库开始)
route_list=
[[('Depot', 'Addr_3'),
('Addr_3', 'Addr_4'),
('Addr_4', 'Depot'),]
[('Depot', 'Addr_1'),
('Addr_1', 'Addr_2'),
('Addr_2', 'Depot'),]
[('Depot', 'Addr_5'),
('Addr_5', 'Addr_6'),
('Addr_6', 'Depot')]]我一般需要它。
非常感谢!
发布于 2022-08-24 11:09:41
假设输入数据是正确的,并且不需要进行检查,那么使用一个简单的循环。
依靠路线的尽头:
route_list = []
tmp = []
for t in get_plan:
tmp.append(t)
if t[1] == 'Depot':
route_list.append(tmp)
tmp = []依靠路线的开始
route_list = []
tmp = []
for t in get_plan:
if t[0] == 'Depot':
if tmp:
route_list.append(tmp)
tmp = [t]
else:
tmp.append(t)
route_list.append(tmp)产出:
[[('Depot', 'Addr_3'), ('Addr_3', 'Addr_4'), ('Addr_4', 'Depot')],
[('Depot', 'Addr_1'), ('Addr_1', 'Addr_2'), ('Addr_2', 'Depot')],
[('Depot', 'Addr_5'), ('Addr_5', 'Addr_6'), ('Addr_6', 'Depot')]]发布于 2022-08-24 11:19:01
您可以使用来自split_before的迭代工具
from more_itertools import split_before
list(split_before(get_plan, lambda x: x[0] == 'Depot'))发布于 2022-08-24 12:31:19
您可以使用这样的numpy来实现这一点。
import numpy as np
get_plan = [('Depot', 'Addr_3'),
('Addr_3', 'Addr_4'),
('Addr_4', 'Depot'),
('Depot', 'Addr_1'),
('Addr_1', 'Addr_2'),
('Addr_2', 'Depot'),
('Depot', 'Addr_5'),
('Addr_5', 'Addr_6'),
('Addr_6', 'Depot')]
# create a numpy array
np_arr = np.array(get_plan)
# Find the indices on which to split the array
indices, = np.nonzero(np_arr[:, 0] == "Depot")
# Split the array
route_list = [sub.tolist() for sub in np.split(np_arr, indices) if sub.size]
print(route_list)输出:
[[['Depot', 'Addr_3'], ['Addr_3', 'Addr_4'], ['Addr_4', 'Depot']],
[['Depot', 'Addr_1'], ['Addr_1', 'Addr_2'], ['Addr_2', 'Depot']],
[['Depot', 'Addr_5'], ['Addr_5', 'Addr_6'], ['Addr_6', 'Depot']]]如果您想要元组而不是列表,可以将sub.tolist()替换为list(map(tuple, sub))
route_list = [list(map(tuple, sub)) for sub in np.splite(np_arr, indices) if sub.size]产出:
[[('Depot', 'Addr_3'), ('Addr_3', 'Addr_4'), ('Addr_4', 'Depot')],
[('Depot', 'Addr_1'), ('Addr_1', 'Addr_2'), ('Addr_2', 'Depot')],
[('Depot', 'Addr_5'), ('Addr_5', 'Addr_6'), ('Addr_6', 'Depot')]]https://stackoverflow.com/questions/73472027
复制相似问题