对于无关紧要的主题标题,我很抱歉,因为我找不到我遇到的问题的正确名称:
我有以下段 ID:
SIDs = ['11','22','33','44']
的每个元素SID
都有 2 个项目,如下所示:
SID[0] = ['T10','T11']
SID[1] = ['T20','T21']
SID[2] = ['T30','T31']
SID[3] = ['T40','T41']
假设我有以下定义如下的 Segment ID:
SegmentPath = ['11','22','33','11','22','33']
在元素方面,SegmentPath
我想构建一个输出项如下:
Used_Path = ['T10', 'T20', 'T31', 'T21', 'T10', 'T20', 'T21']
编辑
如果您注意到,只要按顺序(和),SIDs
其中出现的每个元素SegmentPath
都会重复一次。但是当它达到 33 时,它使用了,返回的方式是 which 。一旦我们到达,我们就用同样的东西来到达和。11, 22
33
T31
11
T21
11
22
33
总结如下图:
然后我返回发生的每个项目的迭代,Used_Path
其中应该是以下内容:
Used_Path_items = ['T10', 'T20', 'T21','T31']
iteration = [2, 2, 1, 1]
无论如何在python中做这样的事情吗?如果有人在python中提供一些提示或代码来提供帮助,我很感激。
现在的答案更加复杂。希望这能捕捉到东西。我做了一些假设。(1)我们不会从44
到11
(2)Used_Path
您的问题中包含 1 太多元素。
所以我们遵循一条线性路径,如果目的地较晚则前进,否则向后。然后我们只用与我原来的答案相同的方式计算遍历次数。
SIDs = ['11', '22', '33', '44']
SID = [['T10','T11'],
['T20','T21'],
['T30','T31'],
['T40','T41']
]
SegmentPath = ['11','22','33','11','22','33']
Used_Path = []
for i in range(len(SegmentPath) - 1):
depart = SIDs.index(SegmentPath[i])
arrive = SIDs.index(SegmentPath[i+1])
if arrive > depart:
for j in range(depart, arrive, 1):
Used_Path.append(SID[j][0])
elif arrive < depart:
for j in range(depart, arrive, -1):
Used_Path.append(SID[j][1])
print(Used_Path)
print([Used_Path.count(t) for t in sorted(set(Used_Path))])
您可以if arrive > depart
使用以下内容进行缩短。不太清楚,所以我也会留下原件。
for i in range(len(SegmentPath) - 1):
depart = SIDs.index(SegmentPath[i])
arrive = SIDs.index(SegmentPath[i+1])
dir = 1 if arrive > depart else -1
for j in range(depart, arrive, dir):
Used_Path.append(SID[j][-1*dir]
print(Used_Path)
print([Used_Path.count(t) for t in sorted(set(Used_Path))])
如果同一段连续出现两次,此版本将无法正常工作。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句