Załóżmy chcę pierwszego elementu, 3. poprzez elementy 200. rocznicy, a 201st elementu poprzez ostatni element po kroku rozmiarze 3, z listy w Pythonie.Python: krótsza składnia dla plasterków z przerwami?
Jednym ze sposobów na to jest z wyraźną indeksowania i konkatenacji:
new_list = old_list[0:1] + old_list[3:201] + old_list[201::3]
Czy istnieje sposób, aby to zrobić za pomocą jednego indeksu na old_list
? Chciałbym coś jak poniżej (wiem, że to nie składniowo od pracy indeksy lista nie może być list, a od Python niestety doesn't have slice literals; Po prostu szukam czegoś bliskiego):
new_list = old_list[[0, 3:201, 201::3]]
mogę osiągnąć niektóre to poprzez przełączenie na tablice NumPy, ale bardziej interesuje mnie, jak to zrobić dla natywnych list Pythona. I może również tworzyć a slice maker czy coś takiego, a być może, że pod silną rękę dając mi równoważny przedmiot plaster do reprezentowania składu wszystkich moich pożądanych plasterki.
ale szukam czegoś, co nie wiąże się tworząc nową klasę zarządzania plastry. Chcę po prostu rodzaj złączyć składni plasterka i paszy, że na mojej liście i mieć listę rozumieją, że oznacza to, że aby dostać osobno plasterki i złączyć ich odpowiednich wyników w końcu.
„Python niestety nie ma prymitywów slice” Nawet 'slice'? –
Przepraszam, powinienem był mówić o literałach plastycznych, a nie o prymitywach. Oznacza to, że nie można po prostu przekazać składni '(0: 10: 2)' jakby to był obiekt, który zawsze reprezentował indeksy. Trzeba przejść przez nudną dodatkową warstwę tworzenia własnego obiektu plastra, który niszczy wszystkie niuanse składni plastra. Zobacz moje [pytanie, które jest również powiązane w powyższym] (http://stackoverflow.com/questions/13706258/passing-python-slice-syntax-around-to-functions). – ely