2014-09-23 55 views
-4

我不明白如何重用列表。Python试图清除并重用列表

下面的代码:

brackets = ["(",")"] 
char = "abcdefghijklmnopqrstuvwyxz" 
chars = list(char) 
nums = ["0","1","2","3","4","5","6","7","8","9"] 
newstrlist = [] 
memoryinbracket = [] 


def unpack(str): 
i = 0 
liststr = list(str) 

while "(" in liststr: 
    index = liststr.index("(") 
    counter = 1 
    i = index + 1 
    while i <= len(liststr): 
     item = liststr[i] 
     if liststr[i] == ")": 
      counter = counter - 1 
      if counter > 0: 
       memoryinbracket.append(item) 
      else: 
       break 
     elif item == "(": 
      memoryinbracket.append(item) 
      counter = counter + 1 
     else : 
      memoryinbracket.append(item) 
     i = i+1 

    unpack(memoryinbracket) 
    inbracket = newstrlist 
    e = index 
    if liststr[i+1] in nums: 
     nr = int(liststr[i+1]) 
     newl = ''.join(inbracket) 
     ch = (newl)*(nr-1) 
     inbracket.append(ch) 
     liststr.pop(i+1) 
    while e<=i: 
     liststr.pop(index) 
     e = e+1 
    liststr.insert(index,inbracket) 
    **del newstrlist[:] ?????? 

newstrlist = []** 
for i in range (len(liststr)): 
    if liststr[i] in chars: 
     newstrlist.append(liststr[i]) 
    if liststr[i] in nums: 
     if liststr[i-1] in chars: 
      if len(liststr)>i+1 and liststr[i+1] in nums: 
       nr = int(liststr[i]+liststr[i+1]) 
       ch = liststr[i-1]*(nr-1) 
       newstrlist.append(ch) 
      elif liststr[i] == "0": 
       newstrlist.remove(liststr[i-1]) 
      else: 
       nr = int(liststr[i]) 
       ch = liststr[i-1]*(nr-1) 
       newstrlist.append(ch)   

    i = i+1 
i = 0  



def test_unpacks():   
unpack("a5(c3b)2ew") 
unpack("a3bc2") 
unpack("a10bc2") 
unpack("a(bc)2d") 
unpack("a(bc)d") 
unpack("(a2)2") 
unpack("a(b2c)d") 

test_unpacks() 

我需要newstrlist在某些时候被清除,但inbracket不改变被重复使用newstrlist之后。

+0

你正在寻找'somelist [:] = []',它在不改变引用的情况下清除列表? – kay 2014-09-23 10:30:07

回答

0

你应该写

inbracket = list(newstrlist); 

的分配,否则你的名单将指向同一个实际的元素,并修改newstrlist将修改inbracket。

+0

为什么我投下了一个有效的答案,并且更多地建议使用非显式切片方法? – 2014-09-23 10:33:24

+0

This acutally worked,thankyou〜 – user3836013 2014-09-23 12:46:38

+0

如果它解决了你的问题,请不要忘记标记为最佳答案。不客气! – 2014-09-23 14:25:26

0

查找到https://stackoverflow.com/a/850831/47351

从科巴的答案复制:

清除代替列表会影响同一列表的所有其他引用。

例如,这种方法不会影响其他参考:

>> a = [1, 2, 3] 
>>> b = a 
>>> a = [] 
>>> print(a) 
[] 
>>> print(b) 
[1, 2, 3] 

但是这一个作用:

>>> a = [1, 2, 3] 
>>> b = a 
>>> del a[:]  # equivalent to del a[0:len(a)] 
>>> print(a) 
[] 
>>> print(b) 
[] 
>>> a is b 
True 

你也可以这样做:

>>> a[:] = [] 
+0

我已经看到了,但没有帮助。因为不能做newstrlist = [] .. – user3836013 2014-09-23 11:35:08