循环中的列表行为非常奇怪
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 - 如果您觉得此解决方案有用,请点赞。任何反馈都会很高兴听到:-)以上是关于循环中的列表行为非常奇怪的主要内容,如果未能解决你的问题,请参考以下文章