O bien, una pregunta más general sería, cómo dividir una matriz para obtener cada línea n-ésima, por lo que para parejas/impares te gustaría omitir una línea, pero en el caso general querrías obtener cada n-ésima línea, omitiendo n-1 líneas.¿La manera más corta de cortar líneas pares/impares de una matriz de python?
Respuesta
Suponiendo que está hablando de una lista , especifique el paso en el sector (y comience el índice). La sintaxis es list[start:end:step]
.
Probablemente conozca el acceso normal a la lista para obtener un elemento, p. l[2]
para obtener el tercer artículo. Dando dos números y dos puntos entre ellos, puede especificar un rango que desea obtener de la lista. El valor de retorno es otra lista. P.ej. l[2:5]
le da el tercer al sexto artículo. También puede pasar un tercer número opcional, que especifica el tamaño del paso. El tamaño de paso predeterminado es uno, que solo significa tomar cada elemento (entre el índice de inicio y final).
Ejemplo:
>>> l = range(10)
>>> l[::2] # even - start at the beginning at take every second item
[0, 2, 4, 6, 8]
>>> l[1::2] # odd - start at second item and take every second item
[1, 3, 5, 7, 9]
Ver lists in the Python tutorial.
Si desea obtener todos los elementos n
-ésimo de una lista (es decir, excluyendo el primer elemento), que tendría que cortar como l[(n-1)::n]
.
Ejemplo:
>>> l = range(20)
>>> l
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19]
Ahora, volviendo cada tercer elemento sería:
>>> l[2::3]
[2, 5, 8, 11, 14, 17]
Si desea incluir el primer elemento, que acaba de hacer l[::n]
. se requieren
Nunca había visto eso antes. El primer número es el índice inicial y el último es el paso entonces? ¿Hay algo entre el '::'? ¿O ambos son un operador, que es diferente de ':'? Si hago 'l [:: 1]', ¿entonces obtengo la matriz original? – fatcat
@fatcat - http://docs.python.org/library/stdtypes.html#sequence-types-str-unicode-list-tuple-bytearray-buffer-xrange, véanse las notas 3 y 5 –
@fatcat: Sí, lo haría obtener la matriz original. Diría que con más frecuencia se ve solo una porción de un índice de inicio a final, como 'l [2: 5]'. El paso es opcional. –
> map(lambda index: arr[index],filter(lambda x: x%n == 0,range(len(arr))))
donde arr
es una lista, y n
rodajas.
-1 para usar 'map()' y 'filter()' con un 'lambda'. Esto se desaconseja/es lento y debe ** siempre ** hacerse usando una lista de comprensión. – ThiefMaster
¿Hay algún experimento para respaldar este reclamo? – ajmartin
Creo que hay una publicación de guido van rossum en algún lugar de la lista de correo de Python sobre ella. De todos modos, es obvio, ya que es llamada de función vs. no llamada de función. A menos que esté usando funciones de llamadas apiladas, es bastante caro – ThiefMaster
Esto es más para mí como un ejemplo completo;)
>>> import itertools
>>> ret = [[1,2], [3,4,5,6], [7], [8,9]]
>>> itertools.izip_longest(*ret)
>>> [x for x in itertools.chain.from_iterable(tmp) if x is not None]
[1, 3, 7, 8, 2, 4, 9, 5, 6]
- 1. ¿La manera más corta de comprobar el cuadrado perfecto?
- 2. Cortar la matriz numpy con otra matriz
- 3. Cómo cortar una matriz de estructuras?
- 4. ¿Cuál es la mejor manera de escribir una matriz corta [] en un archivo en C#?
- 5. ¿La manera más eficiente de indexar una matriz devuelta?
- 6. ¿La manera más limpia de buscar una matriz 2D?
- 7. La manera más eficiente de invertir una matriz numpy
- 8. Cálculo de la distancia más corta entre dos líneas (segmentos de línea) en 3D
- 9. ¿Longitud de la línea más corta?
- 10. Python: cortar la última palabra de una oración?
- 11. Cómo cortar una matriz en bash
- 12. más corta y la mejor manera de ejemplo, "Fecha"/limpia una clase
- 13. Búsqueda eficiente de la ruta más corta en gráficos grandes
- 14. ¿Cómo se corta una matriz en Excel VBA?
- 15. más corta Rubí Quine
- 16. ¿La manera más fácil de realizar la inversión de matriz modular con Python?
- 17. Python - ¿Cómo cortar una cuerda en Python?
- 18. ¿Cómo obtener eficientemente una matriz corta de recursos en Android?
- 19. La mejor manera de cortar un queryset de Django sin golpear la base de datos más de una vez
- 20. Python: cómo cortar secuencias de más de 2 caracteres iguales en una cadena
- 21. ¿Cómo verificar la matriz idéntica de la manera más eficiente?
- 22. PHP: aplana la matriz de la manera más rápida?
- 23. la conversión de una lista de cadenas en una matriz numpy de una manera más rápida
- 24. ¿La manera más corta de unir múltiples elementos DOM a un manejador de eventos usando Jquery?
- 25. Networkx - Longitud de ruta más corta
- 26. ¿Cuál es la forma más corta de contar la cantidad de elementos en un generador/iterador?
- 27. manera más rápida de rellenar una matriz numérica 1D
- 28. PHP: ¿cómo 'cortar' mi matriz?
- 29. recorte uuid más para hacer cadena corta
- 30. Encontrar la ruta más corta usando el algoritmo de Dijkstra
el módulo es su amigo. –
me doy cuenta de que puedo hacerlo en un ciclo con él, pero me preguntaba si podría hacerlo en una sola línea en su lugar – fatcat
Buena pregunta. Las respuestas aquí también me ayudaron. Genial, merci. – Siyah