2017-10-08 13 views
2

私はリスト内のサブリストのすべての組み合わせをネストされたリストとして返すコードを作成しています。これは、再帰およびfor/inループを使用してのみ行うことができます。例えばitertoolsまたはlisttoolsを使用せずにリストのすべての組み合わせを作成するにはどうすればよいですか?

allCombos([1, 2, 3]) 

は、これは私がこれまで持っているコードです

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

を返します:

def allCombos(alist, a=0, b=1): 
    newList = [] 
    if b < len(alist) + 1: 
    newList += [alist[a:b]] + [allCombos(alist, a, b+1)] 
    elif b == len(alist): 
    a = a+1 
    b = a+1 
    newList += [allCombos(alist[a:len(alist)])] 
    else: 
    return newList 

これだけを返すなし。私はここで間違って何をしていますか?どうすれば修正できますか?

+1

[itertools.combinations'](https://docs.python.org/3/library/itertools.html#itertools.combinations)のエントリを参照してください。 Python。 'range(len(iterable)+1)'の 'r 'ごとに実行します。 –

+0

割り当ての制限に基づき、itertoolsとlisttoolsは使用できません。 – mrcmc888

答えて

1

newList.append()の代わりにnewList+=と書いたので、「なし」と表示されます。プラス記号を使用すると配列に追加されません。

+0

割り当ての制約に基づいて、私は追加を使用できません。それを別の方法で書く方法はありますか? – mrcmc888

関連する問題