迭代python列表中的对并在迭代期间更新列表和对,在N-1个地方重新启动迭代

时间:2016-05-17 11:51:44

标签: python list iterable

您好我正在尝试制作一个代码,它在一个看起来像这样的列表中迭代对。

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)    

有什么建议吗?

0 个答案:

没有答案