您好我正在尝试制作一个代码,它在一个看起来像这样的列表中迭代对。
List=[A1,A2,A4,A5,E3,A3,E1,A7,E2,E3]
如果满足条件(A之前的E)将完成某些事情并且对将更新。在这种情况下,将切换对(E3,A3),新订单将为(A3,E3),然后新列表将为:
List=[A1,A2,A4,A5,E3,A3,E1,A7,E2,E3] <--Initial
List=[A1,A2,A4,A5,A3,E3,E1,A7,E2,E3] <--Switched
切换之后,我希望迭代在切换(初始列表),(A4,A5)之前的列表中最后一对两个A的新列表(Switched List)中重新启动,或者从第一个切换对,(A1,A2)元素。始终努力保持最低的复杂度O(N)和最快的性能。
这是我到目前为止所做的:
def pairwise(ListX):
"Pairs -> (A1,A2), (A2,A4), (A4, A5),(A5, E3),(E3, A3),(A3, E1), ..."
a = iter(ListX)
b = iter(ListX)
next(b, None)
return izip(a, b)
for a, b in pairwise(List):
if a!= b and a == 'E':
#do something and switch positions
输入列表可以是:
List_test=[AA_c,AA_A,AE_b,AA_w,AE_x,AE_Y,AA_P,AE_Q]
这里要检查的条件是AE_ *是否在AA_ *之前,这个rutine的实现是:
def AE_looking(Pointer,List_test,Dict):
Final=[]
New=[]
for a, b in pairwise(List_test):
if a[:2] != b[:2] and a[:2] == 'AE':
Final2=Final[:]
New.append(Action(a,b)) #Action is another rutine that takes a and b and gives C.
New.extend(Final)
List_test[:]=filter(lambda x: x not in Final, List_test)
List_test.remove(a)
List_test.remove(b)
Final2.append(b)
Final2.append(a)
Final2.extend(List_test)
New.extend(List_test)
List_test[:]=Final2
###Add element to a dictionary
Dict.update({len(Dict):New[:]})
Dict.update({Pointer:Oper_list[:]})
New[:]=[]
Final.append(b)
if a[:2] != b[:2] and a[:2] != 'AE':
Final.append(a)
if a[:2] == b[:2]:
Final.append(a)
有什么建议吗?