2012-05-20 2 views
2

정수 목록이 l1=[a,b,c]_1to9=range(1,10)입니다. 나는이 문제를 좀하고 싶습니다 :파이썬에서 어떻게 이런 종류의 목록 이해력을 일반화 할 수 있습니까?

[a*i1+b*i2+c*i3 for i1 in _1to9 for i2 in _1to9 for i3 in _1to9] 

하지만 문제는 l1 3 개 요소의 목록이 필요하지 않다는 것이다. 그래서 어떻게 일반화할까요?

편집 : 내가 달성하기 위해 노력하고있어 시각화하는 데 도움 : 일부 기본적인 수학은 여기에 도움이 될 수

>>> l1=[10001,1010, 100] 
>>> [l1[0]+i1+l1[1]*i2+l1[2]*i3 for i1 in _1to9 for i2 in _1to9 for i3 in _1to9] 
+0

이 파이썬이 파이썬 3가 제공하는 것이 일반화

[dot_product([a, b, c], x) for x in itertools.product(_1to9, repeat=3)] 

있어? –

+0

@JohnFeminella : 언제부터 중요합니까? 제목 btw 주셔서 감사합니다. – prongs

+1

downvoter : 의견하시기 바랍니다! – prongs

답변

11

. 먼저 a*i1+b*i2+c*i3inner (dot) product[_1to9] * 3Cartesian product 위에

def dot_product(a, b): 
    return sum(x * y for x, y in zip(a, b)) 

for i1 in _1to9 for i2 in _1to9 for i3 in _1to9 루프 일반화 될 수있는 세 개의 요소 목록이다 실현. 즉 itertools.product으로 파이썬 표준 라이브러리에, 그래서 당신은 임의의 목록 l

[dot_product(l, x) for x in itertools.product(_1to9, repeat=len(l))] 
관련 문제