Jak stosować itertools.produkt do elementów listy list?
Mam listę tablic i chciałbym uzyskać iloczyn kartezjański elementów w tablicach.
Użyję przykładu, aby uczynić to bardziej konkretnym...
Itertools.produkt wydaje się działać, ale utknąłem w małym szczególe.
arrays = [(-1,+1), (-2,+2), (-3,+3)];
If I do
cp = list(itertools.product(arrays));
I get
cp = cp0 = [((-1, 1),), ((-2, 2),), ((-3, 3),)]
But what I want to get is
cp1 = [(-1,-2,-3), (-1,-2,+3), (-1,+2,-3), (-1,+2,+3), ..., (+1,+2,-3), (+1,+2,+3)].
Próbowałem kilku różnych rzeczy:
cp = list(itertools.product(itertools.islice(arrays, len(arrays))));
cp = list(itertools.product(iter(arrays, len(arrays))));
Wszyscy dali mi cp0 zamiast cp1 .
Jakieś pomysły? Z góry dzięki. 32
2 answers
>>> list(itertools.product(*arrays))
[(-1, -2, -3), (-1, -2, 3), (-1, 2, -3), (-1, 2, 3), (1, -2, -3), (1, -2, 3), (1, 2, -3), (1, 2, 3)]
To przekaże wszystkie pary jako oddzielne argumenty product
, które następnie otrzymają iloczyn kartezjański z nich.
Powodem, dla którego Twoja wersja nie działa, jest to, że podajesz product
tylko jeden argument. Zapytanie o iloczyn kartezjański jednej listy jest banalnym przypadkiem i zwraca listę zawierającą tylko jeden element (listę podaną jako argument).
39
Author: interjay,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-06-13 21:44:57
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-06-13 21:44:57
>>> arrays = [(-1,+1), (-2,+2), (-3,+3)]
>>> list(itertools.product(*arrays))
[(-1, -2, -3), (-1, -2, 3), (-1, 2, -3), (-1, 2, 3), (1, -2, -3), (1, -2, 3), (1, 2, -3), (1, 2, 3)]
35
Author: rkhayrov,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-06-13 21:41:14
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-06-13 21:41:14