[PYTHON] 두 목록 사이의 조합?
PYTHON두 목록 사이의 조합?
잠시 지났습니다. 알고리즘을 중심으로 머리를 감싸는 데 어려움을 겪고 있습니다. 기본적으로 두 개의 목록이 있으며 두 목록의 모든 조합을 가져오고 싶습니다.
나는 그것을 올바르게 설명하지 않을 수도 있으므로 여기에 예가 있습니다.
name = 'a', 'b'
number = 1, 2
이 경우 출력은 다음과 같습니다.
1. A1 B2
2. B1 A2
까다로운 부분은 "숫자"변수의 항목보다 "이름"변수에 더 많은 항목이있을 수 있습니다 (숫자는 항상 이름 변수와 같거나 그보다 작습니다).
모든 조합 (중첩 된 for 루프?)을 수행하는 방법이 혼란스럽고 숫자 목록에있는 것보다 이름이 많은 항목이있는 경우 name 변수의 항목을 이동하는 논리에 대해 혼란 스럽습니다.
나는 최고의 프로그래머가 아니지만 누군가가 나를 달성하기 위해 논리 / 알고리즘을 명확히하도록 도와 줄 수 있다고 생각한다. 그래서 나는 중첩 된 for 루프에 막 붙어있다.
최신 정보:
다음은 3 개의 변수와 2 개의 숫자가있는 출력입니다.
name = 'a', 'b', 'c'
number = 1, 2
산출:
1. A1 B2
2. B1 A2
3. A1 C2
4. C1 A2
5. B1 C2
6. C1 B2
해결법
-
==============================
1.len (list1)> = len (list2)이라고 가정합니다. 그럼 당신이 원하는 것 같습니다 list1 길이 len (list2)의 모든 순열을 받아 list2에서 항목과 일치시킵니다. 파이썬에서 :
len (list1)> = len (list2)이라고 가정합니다. 그럼 당신이 원하는 것 같습니다 list1 길이 len (list2)의 모든 순열을 받아 list2에서 항목과 일치시킵니다. 파이썬에서 :
import itertools list1=['a','b','c'] list2=[1,2] [zip(x,list2) for x in itertools.permutations(list1,len(list2))]
보고
[[('a', 1), ('b', 2)], [('a', 1), ('c', 2)], [('b', 1), ('a', 2)], [('b', 1), ('c', 2)], [('c', 1), ('a', 2)], [('c', 1), ('b', 2)]]
-
==============================
2.가장 간단한 방법은 itertools.product를 사용하는 것입니다.
가장 간단한 방법은 itertools.product를 사용하는 것입니다.
a = ["foo", "melon"] b = [True, False] c = list(itertools.product(a, b)) >> [("foo", True), ("foo", False), ("melon", True), ("melon", False)]
-
==============================
3.위의 가장 단순한 것보다 간단 할 수 있습니다.
위의 가장 단순한 것보다 간단 할 수 있습니다.
>>> a = ["foo", "bar"] >>> b = [1, 2, 3] >>> [(x,y) for x in a for y in b] [('foo', 1), ('foo', 2), ('foo', 3), ('bar', 1), ('bar', 2), ('bar', 3)]
수입없이
-
==============================
4.한 줄로 된 목록 작성을 시도해보십시오.
한 줄로 된 목록 작성을 시도해보십시오.
>>> [name+number for name in 'ab' for number in '12'] ['a1', 'a2', 'b1', 'b2'] >>> [name+number for name in 'abc' for number in '12'] ['a1', 'a2', 'b1', 'b2', 'c1', 'c2']
-
==============================
5.interjay로부터의 대답에 대한 작은 개선, 결과를 평평한 목록으로 만들기.
interjay로부터의 대답에 대한 작은 개선, 결과를 평평한 목록으로 만들기.
>>> list3 = [zip(x,list2) for x in itertools.permutations(list1,len(list2))] >>> import itertools >>> chain = itertools.chain(*list3) >>> list4 = list(chain) [('a', 1), ('b', 2), ('a', 1), ('c', 2), ('b', 1), ('a', 2), ('b', 1), ('c', 2), ('c', 1), ('a', 2), ('c', 1), ('b', 2)]
이 링크에서 참조
-
==============================
6.나는이 기능으로 제공되는 독창적 인 조합으로 자체적으로 곱한 목록을 찾고있었습니다.
나는이 기능으로 제공되는 독창적 인 조합으로 자체적으로 곱한 목록을 찾고있었습니다.
import itertools itertools.combinations(list, n_times)
여기 itertools에있는 파이썬 문서에서 발췌 한 내용을 보면 원하는 것을 찾을 수 있습니다.
Combinatoric generators: Iterator | Results -----------------------------------------+---------------------------------------- product(p, q, ... [repeat=1]) | cartesian product, equivalent to a | nested for-loop -----------------------------------------+---------------------------------------- permutations(p[, r]) | r-length tuples, all possible | orderings, no repeated elements -----------------------------------------+---------------------------------------- combinations(p, r) | r-length tuples, in sorted order, no | repeated elements -----------------------------------------+---------------------------------------- combinations_with_replacement(p, r) | r-length tuples, in sorted order, | with repeated elements -----------------------------------------+---------------------------------------- product('ABCD', repeat=2) | AA AB AC AD BA BB BC BD CA CB CC CD DA DB DC DD permutations('ABCD', 2) | AB AC AD BA BC BD CA CB CD DA DB DC combinations('ABCD', 2) | AB AC AD BC BD CD combinations_with_replacement('ABCD', 2) | AA AB AC AD BB BC BD CC CD DD
-
==============================
7.itertools없이
itertools없이
[(list1[i], list2[j]) for i in xrange(len(list1)) for j in xrange(len(list2))]
-
==============================
8."두 개의 목록이 주어지면"각 목록에서 한 항목 쌍의 모든 가능한 순열을 찾고 itertools없이 기본 Python 기능을 사용하여 다른 프로그래밍 언어로 쉽게 복제 할 수 있도록 질문에 대답하십시오.
"두 개의 목록이 주어지면"각 목록에서 한 항목 쌍의 모든 가능한 순열을 찾고 itertools없이 기본 Python 기능을 사용하여 다른 프로그래밍 언어로 쉽게 복제 할 수 있도록 질문에 대답하십시오.
def rec(a, b, ll, size): ret = [] for i,e in enumerate(a): for j,f in enumerate(b): l = [e+f] new_l = rec(a[i+1:], b[:j]+b[j+1:], ll, size) if not new_l: ret.append(l) for k in new_l: l_k = l + k ret.append(l_k) if len(l_k) == size: ll.append(l_k) return ret a = ['a','b','c'] b = ['1','2'] ll = [] rec(a,b,ll, min(len(a),len(b))) print(ll)
보고
[['a1', 'b2'], ['a1', 'c2'], ['a2', 'b1'], ['a2', 'c1'], ['b1', 'c2'], ['b2', 'c1']]
from https://stackoverflow.com/questions/12935194/combinations-between-two-lists by cc-by-sa and MIT license
'PYTHON' 카테고리의 다른 글
[PYTHON] 모든 스레드가 완료 될 때까지 파이썬 다중 스레드 대기 (0) | 2018.10.04 |
---|---|
[PYTHON] 파이썬 CSV 오류 : 라인에 NULL 바이트가 들어 있습니다. (0) | 2018.10.04 |
[PYTHON] NameError를주는 모듈을 다시로드하고 있습니다 : 'reload'이름이 정의되지 않았습니다. (0) | 2018.10.04 |
[PYTHON] 파이썬에서 eth0의 IP 주소를 얻으려면 어떻게해야합니까? (0) | 2018.10.04 |
[PYTHON] 파이썬을 사용하여 한 쌍의 비선형 방정식을 푸는 방법? (0) | 2018.10.04 |