목록 요소의 가능한 모든 조합을 가져오려면 어떻게 해야 합니까?
15개의 숫자가 있는 리스트가 있는데 32,768개의 숫자를 조합하는 코드를 작성해야 합니다.
(Googling에 의해) 찾고 있는 것 같은 코드를 발견했습니다만, 그 코드는 매우 불투명하고, 사용하는 것을 경계하고 있습니다.게다가 좀 더 우아한 해결책이 있을 것 같아요.
10진수 정수 1 ~32768을 반복하여 2진수로 변환하고 2진수 표현을 필터로 사용하여 적절한 숫자를 선택하는 것만이 생각납니다.
더좋 방방 ?법 ?? ???「」를 사용합니다.map()
★★★★★★★★★★★★★★★★★★?
이 답변은 한 가지 측면을 놓쳤습니다. OP는 모든 조합을 요청했습니다.길이 "r"의 조합만이 아닙니다.
따라서 모든 길이 "L"을 반복해야 합니다.
import itertools
stuff = [1, 2, 3]
for L in range(len(stuff) + 1):
for subset in itertools.combinations(stuff, L):
print(subset)
또, 스니지를 얻고 싶은 경우(혹은, 다음에 코드를 읽는 사람의 뇌를 구부리고 싶은 경우), 「combinations()」제너레이터의 체인을 생성해, 그것을 반복할 수 있습니다.
from itertools import chain, combinations
def all_subsets(ss):
return chain(*map(lambda x: combinations(ss, x), range(0, len(ss)+1)))
for subset in all_subsets(stuff):
print(subset)
itertools.combinations를 참조하십시오.
itertools.combinations(iterable, r)
입력 반복 가능 요소의 r 길이 후속 값을 반환합니다.
조합은 사전 정렬 순서로 출력됩니다.따라서 입력 반복 가능이 정렬되면 조합 튜플이 정렬된 순서로 생성됩니다.
2.6부터 배터리 포함!
다음은 게으른 원라이너입니다.또한 반복 툴을 사용하고 있습니다.
from itertools import compress, product
def combinations(items):
return ( set(compress(items,mask)) for mask in product(*[[0,1]]*len(items)) )
# alternative: ...in product([0,1], repeat=len(items)) )
이 답변의 배경에는 2^N의 조합이 있습니다.길이가 N인 이진 문자열의 수와 동일합니다.각 이진 문자열에 대해 "1"에 해당하는 모든 요소를 선택합니다.
items=abc * mask=###
|
V
000 ->
001 -> c
010 -> b
011 -> bc
100 -> a
101 -> a c
110 -> ab
111 -> abc
고려해야 할 사항:
- 하려면 할 수 돼요.
len(...)
items
if (회피책:items
할 수 있는 것이items=list(_itemsArg)
) - , 을 합니다.
items
랜덤이 아닙니다(회피책: 정신나가지 마세요) - 하려면 . 않으면 항목이 고유해야 합니다.
{2,2,1}
★★★★★★★★★★★★★★★★★」{2,1,1}
다{2,1}
(사용: 사용)collections.Counter
「 」의 드롭 인set
나중에 써야 할 요.tuple(sorted(Counter(...).elements()))
시시 、 능우)))))
데모
>>> list(combinations(range(4)))
[set(), {3}, {2}, {2, 3}, {1}, {1, 3}, {1, 2}, {1, 2, 3}, {0}, {0, 3}, {0, 2}, {0, 2, 3}, {0, 1}, {0, 1, 3}, {0, 1, 2}, {0, 1, 2, 3}]
>>> list(combinations('abcd'))
[set(), {'d'}, {'c'}, {'c', 'd'}, {'b'}, {'b', 'd'}, {'c', 'b'}, {'c', 'b', 'd'}, {'a'}, {'a', 'd'}, {'a', 'c'}, {'a', 'c', 'd'}, {'a', 'b'}, {'a', 'b', 'd'}, {'a', 'c', 'b'}, {'a', 'c', 'b', 'd'}]
@Dan H의 높은 지지율 아래 코멘트에서 언급되는 것은powerset()
매뉴얼에 기재되어 있는 레시피를 참조해 주십시오.하지만 지금까지 아무도 답을 올리지 않았다.이 방법이 문제에 대한 최선의 접근법은 아닐지 몰라도 가장 좋은 방법 중 하나이기 때문에, 다른 코멘터로부터 약간의 격려를 받은 후, 이하에 나타냅니다.이 함수는 가능한 모든 길이의 목록 요소의 모든 고유한 조합을 생성합니다(0 및 모든 요소를 포함하는 것 포함).
주의: 미묘하게 다른 목적이 고유한 요소의 조합만 가져오는 경우 행을 변경합니다.s = list(iterable)
로로 합니다.s = list(set(iterable))
중복 요소를 제거합니다. '아예', '아예', '아예'가iterable
결국엔 로 바뀌게 된다.list
(다른 답변과 달리) 제너레이터와 함께 작동함을 의미합니다.
from itertools import chain, combinations
def powerset(iterable):
"powerset([1,2,3]) --> () (1,) (2,) (3,) (1,2) (1,3) (2,3) (1,2,3)"
s = list(iterable) # allows duplicate elements
return chain.from_iterable(combinations(s, r) for r in range(len(s)+1))
stuff = [1, 2, 3]
for i, combo in enumerate(powerset(stuff), 1):
print('combo #{}: {}'.format(i, combo))
출력:
combo #1: ()
combo #2: (1,)
combo #3: (2,)
combo #4: (3,)
combo #5: (1, 2)
combo #6: (1, 3)
combo #7: (2, 3)
combo #8: (1, 2, 3)
이는 재귀(반복, 항복, 목록 이해 없음)를 지원하는 모든 프로그래밍 언어로 쉽게 전송할 수 있는 접근법입니다.
def combs(a):
if len(a) == 0:
return [[]]
cs = []
for c in combs(a[1:]):
cs += [c, c+[a[0]]]
return cs
>>> combs([1,2,3,4,5])
[[], [1], [2], [2, 1], [3], [3, 1], [3, 2], ..., [5, 4, 3, 2, 1]]
재귀 사용법을 다음에 나타냅니다.
>>> import copy
>>> def combinations(target,data):
... for i in range(len(data)):
... new_target = copy.copy(target)
... new_data = copy.copy(data)
... new_target.append(data[i])
... new_data = data[i+1:]
... print new_target
... combinations(new_target,
... new_data)
...
...
>>> target = []
>>> data = ['a','b','c','d']
>>>
>>> combinations(target,data)
['a']
['a', 'b']
['a', 'b', 'c']
['a', 'b', 'c', 'd']
['a', 'b', 'd']
['a', 'c']
['a', 'c', 'd']
['a', 'd']
['b']
['b', 'c']
['b', 'c', 'd']
['b', 'd']
['c']
['c', 'd']
['d']
조합을 0
★★★★★★★★★★★★★★★★★」n
목록에 '이/이'가 포함되어 있는 n
고유 요소) 및 네이티브 방식을 사용합니다.
파이썬 2
from itertools import combinations
input = ['a', 'b', 'c', 'd']
output = sum([map(list, combinations(input, i)) for i in range(len(input) + 1)], [])
파이썬 3
from itertools import combinations
input = ['a', 'b', 'c', 'd']
output = sum([list(map(list, combinations(input, i))) for i in range(len(input) + 1)], [])
출력은 다음과 같습니다.
[[],
['a'],
['b'],
['c'],
['d'],
['a', 'b'],
['a', 'c'],
['a', 'd'],
['b', 'c'],
['b', 'd'],
['c', 'd'],
['a', 'b', 'c'],
['a', 'b', 'd'],
['a', 'c', 'd'],
['b', 'c', 'd'],
['a', 'b', 'c', 'd']]
온라인으로 시험해 보세요.
다음 간단한 코드를 사용하여 Python에서 목록의 모든 조합을 생성할 수 있습니다.
import itertools
a = [1,2,3,4]
for i in xrange(0,len(a)+1):
print list(itertools.combinations(a,i))
결과는 다음과 같습니다.
[()]
[(1,), (2,), (3,), (4,)]
[(1, 2), (1, 3), (1, 4), (2, 3), (2, 4), (3, 4)]
[(1, 2, 3), (1, 2, 4), (1, 3, 4), (2, 3, 4)]
[(1, 2, 3, 4)]
나는 벤이 정말로 모든 조합을 요청했다는 Dan H의 말에 동의한다. itertools.combinations()
는 모든 조합을 제공하는 것은 아닙니다.
또 다른 문제는 입력 반복이 큰 경우 목록에 있는 모든 것이 아니라 제너레이터를 반환하는 것이 더 나을 수 있다는 것입니다.
iterable = range(10)
for s in xrange(len(iterable)+1):
for comb in itertools.combinations(iterable, s):
yield comb
itertools나 다른 라이브러리를 Import하지 않고 답변을 원하는 사용자를 위해 이 기능을 추가하려고 합니다.
def powerSet(items):
"""
Power set generator: get all possible combinations of a list’s elements
Input:
items is a list
Output:
returns 2**n combination lists one at a time using a generator
Reference: edx.org 6.00.2x Lecture 2 - Decision Trees and dynamic programming
"""
N = len(items)
# enumerate the 2**N possible combinations
for i in range(2**N):
combo = []
for j in range(N):
# test bit jth of integer i
if (i >> j) % 2 == 1:
combo.append(items[j])
yield combo
단순 수율 발생기 사용:
for i in powerSet([1,2,3,4]):
print (i, ", ", end="")
위의 사용 예에서 출력:
[] , [1] , [2] , [1, 2] , [3] , [1, 3] , [2, 3] , [1, 2, 3] , [4] , [1, 4] , [2, 4] , [1, 2, 4] , [3, 4] , [1, 3, 4] , [2, 3, 4] , [1, 2, 3, 4] ,
3가지 기능:
- n개의 요소 리스트의 모든 조합
- 순서가 구별되지 않는 경우 n개 요소의 모든 조합 목록
- 모든 순열
import sys
def permutations(a):
return combinations(a, len(a))
def combinations(a, n):
if n == 1:
for x in a:
yield [x]
else:
for i in range(len(a)):
for x in combinations(a[:i] + a[i+1:], n-1):
yield [a[i]] + x
def combinationsNoOrder(a, n):
if n == 1:
for x in a:
yield [x]
else:
for i in range(len(a)):
for x in combinationsNoOrder(a[:i], n-1):
yield [a[i]] + x
if __name__ == "__main__":
for s in combinations(list(map(int, sys.argv[2:])), int(sys.argv[1])):
print(s)
또 의 해결책 줄.이 솔루션에는itertools.combinations
기능, 그러나 우리는 이중 목록( 루프 또는 합금)에 반대하여 list 중 스 해 또 loop 는 용 sum function 대 는 사 트 를 니과
def combs(x):
return [c for i in range(len(x)+1) for c in combinations(x,i)]
데모:
>>> combs([1,2,3,4])
[(),
(1,), (2,), (3,), (4,),
(1, 2), (1, 3), (1, 4), (2, 3), (2, 4), (3, 4),
(1, 2, 3), (1, 2, 4), (1, 3, 4), (2, 3, 4),
(1, 2, 3, 4)]
뛰어난 패키지의 파워셋 기능도 사용할 수 있습니다.
from more_itertools import powerset
l = [1,2,3]
list(powerset(l))
# [(), (1,), (2,), (3,), (1, 2), (1, 3), (2, 3), (1, 2, 3)]
또한 OP의 요건을 충족하는지 확인할 수 있습니다.
from more_itertools import ilen
assert ilen(powerset(range(15))) == 32_768
from itertools import combinations
features = ['A', 'B', 'C']
tmp = []
for i in range(len(features)):
oc = combinations(features, i + 1)
for c in oc:
tmp.append(list(c))
산출량
[
['A'],
['B'],
['C'],
['A', 'B'],
['A', 'C'],
['B', 'C'],
['A', 'B', 'C']
]
다음은 다른 유사한 답변인 https://stackoverflow.com/a/23743696/711085과 유사한 "표준 재귀 응답"입니다(N! 순열을 모두 처리할 수 있는 방법은 없기 때문에 현실적으로 스택 공간 부족에 대해 걱정할 필요가 없습니다).
이 알고리즘은 모든 요소를 차례로 방문하며, 요소를 가져가거나 남깁니다(이 알고리즘에서 직접 2^N 카디널리티를 확인할 수 있습니다).
def combs(xs, i=0):
if i==len(xs):
yield ()
return
for c in combs(xs,i+1):
yield c
yield c+(xs[i],)
데모:
>>> list( combs(range(5)) )
[(), (0,), (1,), (1, 0), (2,), (2, 0), (2, 1), (2, 1, 0), (3,), (3, 0), (3, 1), (3, 1, 0), (3, 2), (3, 2, 0), (3, 2, 1), (3, 2, 1, 0), (4,), (4, 0), (4, 1), (4, 1, 0), (4, 2), (4, 2, 0), (4, 2, 1), (4, 2, 1, 0), (4, 3), (4, 3, 0), (4, 3, 1), (4, 3, 1, 0), (4, 3, 2), (4, 3, 2, 0), (4, 3, 2, 1), (4, 3, 2, 1, 0)]
>>> list(sorted( combs(range(5)), key=len))
[(),
(0,), (1,), (2,), (3,), (4,),
(1, 0), (2, 0), (2, 1), (3, 0), (3, 1), (3, 2), (4, 0), (4, 1), (4, 2), (4, 3),
(2, 1, 0), (3, 1, 0), (3, 2, 0), (3, 2, 1), (4, 1, 0), (4, 2, 0), (4, 2, 1), (4, 3, 0), (4, 3, 1), (4, 3, 2),
(3, 2, 1, 0), (4, 2, 1, 0), (4, 3, 1, 0), (4, 3, 2, 0), (4, 3, 2, 1),
(4, 3, 2, 1, 0)]
>>> len(set(combs(range(5))))
32
모든 조합을 얻기 위해 itertools를 사용하는 것이 훨씬 더 실용적이라는 것을 알지만, 만약 당신이 원하는 것이 있다면, 당신은 이것을 목록 이해만으로 달성할 수 있다. 만약 당신이 많은 코드를 만들고 싶다면 말이다.
두 쌍의 조합의 경우:
lambda l: [(a, b) for i, a in enumerate(l) for b in l[i+1:]]
세 쌍의 조합은 다음과 같이 간단합니다.
lambda l: [(a, b, c) for i, a in enumerate(l) for ii, b in enumerate(l[i+1:]) for c in l[i+ii+2:]]
결과는 itertools.combinations를 사용하는 것과 동일합니다.
import itertools
combs_3 = lambda l: [
(a, b, c) for i, a in enumerate(l)
for ii, b in enumerate(l[i+1:])
for c in l[i+ii+2:]
]
data = ((1, 2), 5, "a", None)
print("A:", list(itertools.combinations(data, 3)))
print("B:", combs_3(data))
# A: [((1, 2), 5, 'a'), ((1, 2), 5, None), ((1, 2), 'a', None), (5, 'a', None)]
# B: [((1, 2), 5, 'a'), ((1, 2), 5, None), ((1, 2), 'a', None), (5, 'a', None)]
이건 어때..목록 대신 문자열을 사용했지만, 같은..문자열은 Python의 목록처럼 취급할 수 있습니다.
def comb(s, res):
if not s: return
res.add(s)
for i in range(0, len(s)):
t = s[0:i] + s[i + 1:]
comb(t, res)
res = set()
comb('game', res)
print(res)
다음 두 가지 구현이 있습니다.itertools.combinations
목록을 반환하는 사람
def combinations(lst, depth, start=0, items=[]):
if depth <= 0:
return [items]
out = []
for i in range(start, len(lst)):
out += combinations(lst, depth - 1, i + 1, items + [lst[i]])
return out
하나는 발전기를 반환한다.
def combinations(lst, depth, start=0, prepend=[]):
if depth <= 0:
yield prepend
else:
for i in range(start, len(lst)):
for c in combinations(lst, depth - 1, i + 1, prepend + [lst[i]]):
yield c
prepend 인수는 스태틱하며 모든 콜에 따라 변경되지 않으므로 도우미 기능을 제공하는 것이 좋습니다.
print([c for c in combinations([1, 2, 3, 4], 3)])
# [[1, 2, 3], [1, 2, 4], [1, 3, 4], [2, 3, 4]]
# get a hold of prepend
prepend = [c for c in combinations([], -1)][0]
prepend.append(None)
print([c for c in combinations([1, 2, 3, 4], 3)])
# [[None, 1, 2, 3], [None, 1, 2, 4], [None, 1, 3, 4], [None, 2, 3, 4]]
이것은 매우 피상적인 사건이지만, 후회보다는 안전한 것이 낫다.
없이. itertools
Python 3에서는 다음과 같은 작업을 수행할 수 있습니다.
def combinations(arr, carry):
for i in range(len(arr)):
yield carry + arr[i]
yield from combinations(arr[i + 1:], carry + arr[i])
처음에 있던 곳에carry = "".
이터툴의 조합
import itertools
col_names = ["aa","bb", "cc", "dd"]
all_combinations = itertools.chain(*[itertools.combinations(col_names,i+1) for i,_ in enumerate(col_names)])
print(list(all_combinations))
이 코드에는 네스트 리스트가 있는 단순한 알고리즘이 사용되고 있습니다.
# FUNCTION getCombos: To generate all combos of an input list, consider the following sets of nested lists...
#
# [ [ [] ] ]
# [ [ [] ], [ [A] ] ]
# [ [ [] ], [ [A],[B] ], [ [A,B] ] ]
# [ [ [] ], [ [A],[B],[C] ], [ [A,B],[A,C],[B,C] ], [ [A,B,C] ] ]
# [ [ [] ], [ [A],[B],[C],[D] ], [ [A,B],[A,C],[B,C],[A,D],[B,D],[C,D] ], [ [A,B,C],[A,B,D],[A,C,D],[B,C,D] ], [ [A,B,C,D] ] ]
#
# There is a set of lists for each number of items that will occur in a combo (including an empty set).
# For each additional item, begin at the back of the list by adding an empty list, then taking the set of
# lists in the previous column (e.g., in the last list, for sets of 3 items you take the existing set of
# 3-item lists and append to it additional lists created by appending the item (4) to the lists in the
# next smallest item count set. In this case, for the three sets of 2-items in the previous list. Repeat
# for each set of lists back to the initial list containing just the empty list.
#
def getCombos(listIn = ['A','B','C','D','E','F'] ):
listCombos = [ [ [] ] ] # list of lists of combos, seeded with a list containing only the empty list
listSimple = [] # list to contain the final returned list of items (e.g., characters)
for item in listIn:
listCombos.append([]) # append an emtpy list to the end for each new item added
for index in xrange(len(listCombos)-1, 0, -1): # set the index range to work through the list
for listPrev in listCombos[index-1]: # retrieve the lists from the previous column
listCur = listPrev[:] # create a new temporary list object to update
listCur.append(item) # add the item to the previous list to make it current
listCombos[index].append(listCur) # list length and append it to the current list
itemCombo = '' # Create a str to concatenate list items into a str
for item in listCur: # concatenate the members of the lists to create
itemCombo += item # create a string of items
listSimple.append(itemCombo) # add to the final output list
return [listSimple, listCombos]
# END getCombos()
반복 도구 사용 안 함:
def combine(inp):
return combine_helper(inp, [], [])
def combine_helper(inp, temp, ans):
for i in range(len(inp)):
current = inp[i]
remaining = inp[i + 1:]
temp.append(current)
ans.append(tuple(temp))
combine_helper(remaining, temp, ans)
temp.pop()
return ans
print(combine(['a', 'b', 'c', 'd']))
이것이 나의 실장입니다.
def get_combinations(list_of_things):
"""gets every combination of things in a list returned as a list of lists
Should be read : add all combinations of a certain size to the end of a list for every possible size in the
the list_of_things.
"""
list_of_combinations = [list(combinations_of_a_certain_size)
for possible_size_of_combinations in range(1, len(list_of_things))
for combinations_of_a_certain_size in itertools.combinations(list_of_things,
possible_size_of_combinations)]
return list_of_combinations
설명서에 기재된 바와 같이
def combinations(iterable, r):
# combinations('ABCD', 2) --> AB AC AD BC BD CD
# combinations(range(4), 3) --> 012 013 023 123
pool = tuple(iterable)
n = len(pool)
if r > n:
return
indices = list(range(r))
yield tuple(pool[i] for i in indices)
while True:
for i in reversed(range(r)):
if indices[i] != i + n - r:
break
else:
return
indices[i] += 1
for j in range(i+1, r):
indices[j] = indices[j-1] + 1
yield tuple(pool[i] for i in indices)
x = [2, 3, 4, 5, 1, 6, 4, 7, 8, 3, 9]
for i in combinations(x, 2):
print i
목록 이해 사용:
def selfCombine( list2Combine, length ):
listCombined = str( ['list2Combine[i' + str( i ) + ']' for i in range( length )] ).replace( "'", '' ) \
+ 'for i0 in range(len( list2Combine ) )'
if length > 1:
listCombined += str( [' for i' + str( i ) + ' in range( i' + str( i - 1 ) + ', len( list2Combine ) )' for i in range( 1, length )] )\
.replace( "', '", ' ' )\
.replace( "['", '' )\
.replace( "']", '' )
listCombined = '[' + listCombined + ']'
listCombined = eval( listCombined )
return listCombined
list2Combine = ['A', 'B', 'C']
listCombined = selfCombine( list2Combine, 2 )
출력은 다음과 같습니다.
['A', 'A']
['A', 'B']
['A', 'C']
['B', 'B']
['B', 'C']
['C', 'C']
누군가 나처럼 역목록을 찾고 있다면:
stuff = [1, 2, 3, 4]
def reverse(bla, y):
for subset in itertools.combinations(bla, len(bla)-y):
print list(subset)
if y != len(bla):
y += 1
reverse(bla, y)
reverse(stuff, 1)
flag = 0
requiredCals =12
from itertools import chain, combinations
def powerset(iterable):
s = list(iterable) # allows duplicate elements
return chain.from_iterable(combinations(s, r) for r in range(len(s)+1))
stuff = [2,9,5,1,6]
for i, combo in enumerate(powerset(stuff), 1):
if(len(combo)>0):
#print(combo , sum(combo))
if(sum(combo)== requiredCals):
flag = 1
break
if(flag==1):
print('True')
else:
print('else')
파티에 늦었지만, 같은 문제에 대해 찾은 해결책을 공유하고 싶습니다.구체적으로는 'SR'이 아니라 'SR'이 아니라 'STAR'가 더 좋았습니다.
lst = [S, T, A, R]
lstCombos = []
for Length in range(0,len(lst)+1):
for i in lst:
lstCombos.append(lst[lst.index(i):lst.index(i)+Length])
마지막 줄 앞에 있는 경우 추가 추가 기능으로 중복을 필터링할 수 있습니다.
lst = [S, T, A, R]
lstCombos = []
for Length in range(0,len(lst)+1):
for i in lst:
if not lst[lst.index(i):lst.index(i)+Length]) in lstCombos:
lstCombos.append(lst[lst.index(i):lst.index(i)+Length])
어떤 이유로 인해 출력에 공백 목록이 반환되는 경우 다음과 같이 덧붙였습니다.
for subList in lstCombos:
if subList = '':
lstCombos.remove(subList)
이 주제에 조금 늦었지만, 누군가를 도울 수 있을 것 같아요.
You can use 사용할 수 있습니다.product
부에서itertools
:
from itertools import product
n = [1, 2, 3]
result = product(n, repeat=3) # You can change the repeat more then n length
print(list(result))
출력:
[(1, 1, 1), (1, 1, 2), (1, 1, 3), (1, 2, 1), (1, 2, 2), (1, 2, 3), (1, 3, 1),
(1, 3, 2), (1, 3, 3), (2, 1, 1), (2, 1, 2), (2, 1, 3), (2, 2, 1), (2, 2, 2),
(2, 2, 3), (2, 3, 1), (2, 3, 2), (2, 3, 3), (3, 1, 1), (3, 1, 2), (3, 1, 3),
(3, 2, 1), (3, 2, 2), (3, 2, 3), (3, 3, 1), (3, 3, 2), (3, 3, 3)]
또 다른 예로 반복 인수의 변경을 들 수 있습니다.
from itertools import product
n = [1, 2, 3]
result = product(n, repeat=4) # Changing repeat to 4
print(list(result))
출력:
(1, 1, 2, 3), (1, 1, 3, 1), (1, 1, 3, 2), (1, 1, 3, 3), (1, 2, 1, 1),
(1, 2, 1, 2), (1, 2, 1, 3), (1, 2, 2, 1), (1, 2, 2, 2), (1, 2, 2, 3),
(1, 2, 3, 1), (1, 2, 3, 2), (1, 2, 3, 3), (1, 3, 1, 1), (1, 3, 1, 2),
(1, 3, 1, 3), (1, 3, 2, 1), (1, 3, 2, 2), (1, 3, 2, 3), (1, 3, 3, 1),
(1, 3, 3, 2), (1, 3, 3, 3), (2, 1, 1, 1), (2, 1, 1, 2), (2, 1, 1, 3),
(2, 1, 2, 1), (2, 1, 2, 2), (2, 1, 2, 3), (2, 1, 3, 1), (2, 1, 3, 2),
(2, 1, 3, 3), (2, 2, 1, 1), (2, 2, 1, 2), (2, 2, 1, 3), (2, 2, 2, 1),
(2, 2, 2, 2), (2, 2, 2, 3), (2, 2, 3, 1), (2, 2, 3, 2), (2, 2, 3, 3),
(2, 3, 1, 1), (2, 3, 1, 2), (2, 3, 1, 3), (2, 3, 2, 1), (2, 3, 2, 2),
(2, 3, 2, 3), (2, 3, 3, 1), (2, 3, 3, 2), (2, 3, 3, 3), (3, 1, 1, 1),
(3, 1, 1, 2), (3, 1, 1, 3), (3, 1, 2, 1), (3, 1, 2, 2), (3, 1, 2, 3),
(3, 1, 3, 1), (3, 1, 3, 2), (3, 1, 3, 3), (3, 2, 1, 1), (3, 2, 1, 2),
(3, 2, 1, 3), (3, 2, 2, 1), (3, 2, 2, 2), (3, 2, 2, 3), (3, 2, 3, 1),
(3, 2, 3, 2), (3, 2, 3, 3), (3, 3, 1, 1), (3, 3, 1, 2), (3, 3, 1, 3),
(3, 3, 2, 1), (3, 3, 2, 2), (3, 3, 2, 3), (3, 3, 3, 1), (3, 3, 3, 2),
(3, 3, 3, 3)]```
콤비네이션 라이브러리를 사용하지 않는 경우는, 다음과 같은 해결책이 있습니다.
nums = [1,2,3]
p = [[]]
fnl = [[],nums]
for i in range(len(nums)):
for j in range(i+1,len(nums)):
p[-1].append([i,j])
for i in range(len(nums)-3):
p.append([])
for m in p[-2]:
p[-1].append(m+[m[-1]+1])
for i in p:
for j in i:
n = []
for m in j:
if m < len(nums):
n.append(nums[m])
if n not in fnl:
fnl.append(n)
for i in nums:
if [i] not in fnl:
fnl.append([i])
print(fnl)
출력:
[[], [1, 2, 3], [1, 2], [1, 3], [2, 3], [1], [2], [3]]
언급URL : https://stackoverflow.com/questions/464864/how-to-get-all-possible-combinations-of-a-list-s-elements
'sourcecode' 카테고리의 다른 글
한 페이지에 여러 개의 리캡처를 표시하려면 어떻게 해야 하나요? (0) | 2022.12.26 |
---|---|
mysql 테이블이 mysql을 사용하고 있는지 어떻게 알 수 있습니까?ISAM 또는 InnoDB 엔진 (0) | 2022.12.06 |
ehcache에서 존속 가능 시간과 아이돌 시간을 구별하는 방법 (0) | 2022.12.06 |
'==' 또는 '==='을 사용하여 문자열과 'strcmp()'을 비교합니다. (0) | 2022.12.06 |
Python REST(웹 서비스) 프레임워크 권장 사항 (0) | 2022.12.06 |