Mam listę w słowniku:

Number_of_lists=3           #user sets this value, can be any positive integer
My_list={}
for j in range(1,Number_of_lists+1):
  My_list[j]=[(x,y,z)]  

Number_of_lists jest zmienną ustawioną przez użytkownika. Nie wiedząc wcześniej o wartości określonej przez użytkownika, chciałbym wreszcie mieć połączoną listę wszystkich listych słowników. Na przykład, jeśli Number_of_lists=3 i odpowiednie listy są My_list[1]=[(1,2,3)], My_list[2]=[(4,5,6)], My_list[3]=[(7,8,9)] Rezultatem byłoby:

All_my_lists=My_list[1]+My_list[2]+My_list[3]

Gdzie: All_my_lists=[(1,2,3),(4,5,6),(7,8,9)].

Więc co próbuję zrobić, to zautomatyzować powyższą procedurę dla wszystkich możliwych:

Number_of_lists=n #where n can be any positive integer

Jestem trochę zagubiony, aby teraz spróbować użyć iteratora, aby dodać listy i zawsze niepowodzenie. Jestem początkującego Pythona i to jest hobby kopalni, więc jeśli odpowiesz, wyjaśnij wszystko w swojej odpowiedzi, robię to do nauki, nie pytam od ciebie, żeby odrabiać lekcje :)

EDYTUJ

@CodeBox (spójrz na komentarze poniżej) prawidłowo wskazane, że My_List, jak wyświetlany w moim kodzie jest w rzeczywistości słownikiem, a nie listą. Uważaj, jeśli używasz dowolnego z kodu.

5
CosmoSurreal 15 sierpień 2012, 14:41

3 odpowiedzi

Jeśli jesteś zainteresowany ostateczną listą i nie potrzebujesz My_list (co powinieneś zmienić nazwę, ponieważ jest to słownik!) Więc możesz po prostu zrobić:

Number_of_lists=3
result = []
for j in range(1,Number_of_lists+1):
    result += (x,y,z)
1
codebox 15 sierpień 2012, 10:47

Możesz spróbować bardziej funkcjonalnego podejścia, obracając Number_of_lists do sekwencji klawiszy przy użyciu range i wybierz ze słownika z map:

My_list={1:[1,2,3], 2:[4,5,6], 3:[7,8,9], 4:[10,11,12]}
Number_of_lists=3
All_my_lists=map(lambda x: tuple(My_list[x]), range(1, Number_of_lists+1))

Przykładowe dane wyjściowe:

>>> All_my_lists
[(1, 2, 3), (4, 5, 6), (7, 8, 9)]
1
Benedict 15 sierpień 2012, 11:06

Może być łatwiejsze do wygenerowania All_my_lists, a następnie My_list.

Budynek All_my_lists

Korzystanie z Wykonanie listy i {x0}}, aby wygenerować All_my_lists:

>>> num = 3  # for brevity, I changed Number_of_lists to num
>>> All_my_lists = [tuple(range(num*i + 1, num*(i+1) + 1)) for i in range(0, num)]
>>> All_my_lists
[(1, 2, 3), (4, 5, 6), (7, 8, 9)]

Alternatywnie, możemy użyć funkcji grouper() z listy iTertools Recipe który spowoduje znacznie czyszczący kod:

>>> All_my_lists = list(grouper(num, range(1, num*3+1)))
>>> All_my_lists
[(1, 2, 3), (4, 5, 6), (7, 8, 9)]

Budynek My_lists

Możemy wtedy używać dict konstruktor wraz z rozumieniem listy i enumerate(), aby zbudować dolegi My_list X3}}:

>>> My_lists = dict((i+1, [v]) for i,v in enumerate(All_my_lists))
>>> My_lists
{1: [(1, 2, 3)], 2: [(4, 5, 6)], 3: [(7, 8, 9)]}
>>> My_lists[1]
[(1, 2, 3)]
>>> My_lists[2]
[(4, 5, 6)]
>>> My_lists[3]
[(7, 8, 9)]
1
Shawn Chin 15 sierpień 2012, 11:09