나는 목록의 번호를 가지고 :X의 조건부 데카르트 곱을 나열하면 k, v 쌍을 구할 수 있습니까? 다음과 같이
LISTA = ['A1', 'A2']
LISTB = ['B1', 'B2']
LISTC = ['C1']
LISTD = ['D1', 'D2']
LISTE = ['E1', 'E2', 'E3']
내가 '각 튜플에 LISTY
의 값에 따라 다음 LISTX
및 LISTY
, 그리고 데카르트의 제품을 얻을 수있는 함수를 작성하고 싶습니다 d LISTJ
의 제품 또는 LISTK
의 제품을 추가하고 싶습니다. 모두 키/값 쌍으로 또는 목록으로 [0]
이 키이고 [1]
이 값입니다.
즉 만약 X == LISTA
, Y == LISTB
, J == LISTC
, K == LISTE
, 우리는 값 B1
이 있다면 우리는 우리가 K(LISTE)
와 제품을 얻을 J(LISTC)
및 B2
으로 제품을 얻을 가정, 우리는 같은 것을 받아야합니다 ...
[{'LISTA': A1, 'LISTB': B1 'LISTC': C1},
{'LISTA': A1, 'LISTB': B2 'LISTE': E1},
{'LISTA': A1, 'LISTB': B2 'LISTE': E2},
{'LISTA': A1, 'LISTB': B2 'LISTE': E3},
{'LISTA': A2, 'LISTB': B1 'LISTC': C1},
{'LISTA': A2, 'LISTB': B2 'LISTE': E1},
{'LISTA': A2, 'LISTB': B2 'LISTE': E2},
{'LISTA': A2, 'LISTB': B2 'LISTE': E3}]
아마 우리는이 제품을 처음으로 얻은 다음 제품 번호를 k,v
쌍 (또는 k
)과 함께 해당 제품의 각 튜플에 대한 dict을 반환하기 위해 생성기를 사용할 수 있습니다. 그러나 인수에서 'y_val'을 갖는 것보다 더 일반적인 방법을 알아낼 수 없으며 (('LISTA', A1), ('LISTB', B1), C1)
과 같은 튜플로 끝나는 것이 아니라 J_OR_K
에 키를 할당하는 방법을 잘 모르겠습니다. 이것이 내가 이전에 asked을했습니다 질문에 대한 유사하지만
import itertools as it
def J_OR_K(P, y_val1, y_val2, j_list, k_list):
for k, v in P:
for x in {y_val1:j_list, y_val2:k_list}[v]:
yield {a,b,x}
def my_func(x, y, j, k):
res = []
# get cartesian product of x, y
prod_xy = it.product(it.product(['LISTA'], x),
it.product(['LISTB'], y))
# get product with EITHER J OR K
for t in J_OR_K(j, k):
res.append(t)
이 적당히 다르고 더 복잡 - 그래서 새 질문을 필요 느꼈다.
다음 중첩 된 이해가 예를 들어 원하는 효과에 작동
하나의 문제는 내가 볼이되는리스트의 이름 'j_list'와'k_list' 매개 변수에서 (목록 자체 만 사용 가능하기 때문에) 결정할 수 없습니다. 가능한 해결책 : (1) 목록에서 파생 된 클래스로 이름을 보유하거나 (2) 목록 이름에 대한 추가 매개 변수. –
'LISTD = [ 'D1', 'D2']'불필요한 것으로 보입니다. – jq170727