Python试图清除和重用lis

2024-09-30 12:30:46 发布

您现在位置: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,但是在newstrlist被重新使用之后不能更改。在


Tags: inindexifcounterchitemnrappend
2条回答

注意https://stackoverflow.com/a/850831/47351

复制Koba的答案:

就地清除列表将影响同一列表的所有其他引用。在

例如,此方法不影响其他引用:

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

但这一个确实:

^{pr2}$

您还可以:

>>> a[:] = []

你应该写信

inbracket = list(newstrlist);

否则,您的列表将成为指向同一实际元素的指针,而修改newstrlist将修改infracket。在

相关问题 更多 >

    热门问题