循环中的列表行为非常奇怪

Posted

技术标签:

【中文标题】循环中的列表行为非常奇怪【英文标题】:List behaviour is being very weird withing a loop 【发布时间】:2020-10-08 14:45:13 【问题描述】:

我有一个列表,开头为

value=[1,2,3]
out_list=[value]

while(i<2*len(nums)):
         
        temp_value=temp[locator]
        temp[locator]=temp[locator+1]
        temp[locator+1]=temp_value
        print(temp, end="   ")
        output_list+=[temp]
        print(output_list)
        i+=1

然后我看看我用 temp 得到的值是一些正常值:

[1, 3, 2] 
[3, 2, 1]
[3, 1, 2]
[2, 3, 1]
[2, 1, 3]

这应该意味着我的 output_list 也很好吧?不,我将其作为最终输出。

[[1, 3, 2], [1, 3, 2], [1, 3, 2]]
[[1, 3, 2], [1, 3, 2], [1, 3, 2], [3, 2, 1]]
[[1, 3, 2], [1, 3, 2], [1, 3, 2], [3, 1, 2], [3, 1, 2]]
[[1, 3, 2], [1, 3, 2], [1, 3, 2], [3, 1, 2], [3, 1, 2], [2, 3, 1]]
[[1, 3, 2], [1, 3, 2], [1, 3, 2], [3, 1, 2], [3, 1, 2], [2, 1, 3], [2, 1, 3]]

【问题讨论】:

请提供一个最小的可重现示例(强调可重现) 【参考方案1】:

您只想将列表相互连接,对吗?

喜欢:

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

如果是这样,请从 [temp] 中删除 []

output_list+=temp

更新: 试试这个?

from itertools import permutations 
comb = permutations([1, 2, 3], 3)
result=[]
for i in comb: 
    result+=[list(i)]
print(result)

【讨论】:

我需要做[[1,2,3],[3,2,1]]等等 您想要输入列表 [1,2,3] 中的所有组合吗?见更新。 @Mr.JohnnyDoe【参考方案2】:

我正在发布回溯解决方案 - 因为您的标签中有回溯。 这将为您提供列表的所有排列 -> 嵌套列表作为输出。

def permute(nums):
    
    outputList = []
    set_ = set()
    
    def helper(l, count = 0):
        if count == len(nums):
            outputList.append(l)
        else:
            for number in nums:
                if number not in set_:
                    set_.add(number)
                    helper(l + [number], count + 1)
                    set_.remove(number)
    helper([])
    return outputList

permute([1,2,3]) 将产生

[[1, 2, 3], [1, 3, 2], [2, 1, 3], [2, 3, 1], [3, 1, 2], [3, 2, 1]]

【讨论】:

@Mr. Johnny Doe - 如果您觉得此解决方案有用,请点赞。任何反馈都会很高兴听到:-)

以上是关于循环中的列表行为非常奇怪的主要内容,如果未能解决你的问题,请参考以下文章

删除循环中的控件会导致奇怪的行为

列表理解中的Python奇怪行为[重复]

奇怪的行为:列表理解中的 Lambda

矩阵形成中的奇怪行为(C++,犰狳)

QMessageBoxes 在 OSX 中有非常奇怪的行为

Excel中的奇怪ActiveX列表框行为