Я решить этот вопрос на Interviewbit:Неожиданное поведение список на Append в питона
Учитывая множество различных целых чисел, S, возвращает все возможные subsets.Elements в подгруппе должно быть в не-нисходящем Order.The набор решений не должен содержать дубликатов подмножеств.
А вот мой просто, сам объяснительное код:
ans_list=[]
def solve(i,a,tmp,l,k):
global ans_list
if i==l :
print "List to append: " ,tmp
ans_list.append(tmp)
print "ans_list currently: ", ans_list
return
j=k
while j < len(a):
tmp.append(a[j])
solve(i+1,a,tmp,l,j+1)
tmp.pop()
j+=1
class Solution:
# @param a : list of integers
# @return a list of list of integers
def subsets(self, a):
a=sorted(a)
global ans_list
tmp=[]
i=0
for l in range(len(a)+1):
solve(0,a,tmp,l,0)
return ans_list
def main():
a=[1,2,3]
ob=Solution()
li=ob.subsets(a)
print "Ans:" ,li
if __name__ == '__main__':
main()
А вот выход:
List to append: []
Current ans_list: [[]]
List to append: [1]
Current ans_list: [[1], [1]]
List to append: [2]
Current ans_list: [[2], [2], [2]]
List to append: [3]
Current ans_list: [[3], [3], [3], [3]]
List to append: [1, 2]
Current ans_list: [[1, 2], [1, 2], [1, 2], [1, 2], [1, 2]]
List to append: [1, 3]
Current ans_list: [[1, 3], [1, 3], [1, 3], [1, 3], [1, 3], [1, 3]]
List to append: [2, 3]
Current ans_list: [[2, 3], [2, 3], [2, 3], [2, 3], [2, 3], [2, 3], [2, 3]]
List to append: [1, 2, 3]
Current ans_list: [[1, 2, 3], [1, 2, 3], [1, 2, 3], [1, 2, 3], [1, 2, 3], [1, 2, 3], [1, 2, 3], [1, 2, 3]]
Ans: [[], [], [], [], [], [], [], []]
Я даже попытался прохождения ans_list
в качестве параметра, а не глобальная переменная, но результат такой же. Даже попытался использовать словарь, чем список списков, но он приводит к такому же поведению. Однако одна интересная вещь, я отметил, когда я изменить ans_list.append(tmp)
к ans_list.extend(tmp)
в solve
функции, то выход будет:
List to extend: []
Current ans_list: []
List to extend: [1]
Current ans_list: [1]
List to extend: [2]
Current ans_list: [1, 2]
List to extend: [3]
Current ans_list: [1, 2, 3]
List to extend: [1, 2]
Current ans_list: [1, 2, 3, 1, 2]
List to extend: [1, 3]
Current ans_list: [1, 2, 3, 1, 2, 1, 3]
List to extend: [2, 3]
Current ans_list: [1, 2, 3, 1, 2, 1, 3, 2, 3]
List to extend: [1, 2, 3]
Current ans_list: [1, 2, 3, 1, 2, 1, 3, 2, 3, 1, 2, 3]
Ans: [1, 2, 3, 1, 2, 1, 3, 2, 3, 1, 2, 3]
, который в значительной степени ожидается. Теперь я не уверен, в чем причина этого неожиданного поведения с добавлением списков и словаря в python, тогда как расширение дает правильный ответ. Любая помощь будет оценена по достоинству.
Я новичок в Python и с помощью Python 2.7.10
Спасибо за помощь. Это решило мою проблему. Не могли бы вы связать помощь для других способов, которые можно было бы использовать для исправления этого. – Krist
Вместо того, чтобы фиксировать его, я думаю, вы должны перепроектировать свое решение. Эта проблема может быть решена в 5-6 питонической линии. Я могу опубликовать решение проблемы, если вы хотите – eli
Это был мой третий код в python. Я попытаюсь перепроектировать его, а также буду рад видеть вас, и мне было любопытно узнать о других способах, которые могли бы устранить проблему только для того, чтобы расширить мои знания. – Krist