No es que una pregunta, para que realmente se entiende desde la programación Python?

Anote el título cuando la mente no puede suprimir los parientes que sonó la voz un poco ronca:

La distancia que llegó canción familiar,
¿por qué esas voces débiles.
Cuánto tiempo sin verte, ¿estás bien ahora?
No hay que una canción
se hace suavemente a lo largo y,
con los altibajos de nuestras vidas,
cantar el tema juntos,
no es que una canción
hace repentinamente que piensa de mí,
te hacen feliz, pero también hace que se preocupe,
por lo tengo un ......

Terminar musical, volvamos al tema. Recientemente LeetCode de exploración, que se encuentra un título poco muy interesante. Cuando trato de responder en Python, cuando realmente se gastó una colección, sus funciones, la función, las funciones lambda, la función ordenada código postal, el proceso de depuración también implica el concepto de iteradores, generadores, las listas por comprensión. Un tema que puede parecer muy simple, aunque el código final se puede combinar en una sola línea, pero casi las técnicas de programación Python utiliza de nuevo, que se describe como "ver el espíritu de matices"! Con este título, esto puede hacer que usted realmente entiende de la programación Python.

Esta cuestión se llama "número de la suerte en la lista." ¿Qué es lo número de la suerte? En la lista de números enteros, si hay frecuencia y su valor es igual al tamaño de un número, llamamos a este número como "número de la suerte." Por ejemplo, la lista [1, 2, 2, 3], el número de las figuras 1 y el número 2 son 1 y 2, respectivamente, son número de la suerte, pero ha habido un 3, 3 no es un número de la suerte.

Comprender el concepto de números de la suerte, tenemos que tratar de encontrar una lista [3, 5, 2, 7, 3, 1, 2, 4, 8, 9, 3] en él número de la suerte. Este proceso se puede dividir en los siguientes pasos:

  1. La lista no identifica números duplicados
  2. Contar el número de veces que cada número aparece en la lista
  3. El número de veces igual a esos números parecen encontrar los números mismos

Paso 1, la lista no identifica números duplicados

La lista no identifica números duplicados, es decir, para eliminar la lista de elementos que se repiten, que se refiere como el "pesado ir." Deduplicación mayoría de la manera más sencilla es utilizar la colección.

>>> arr = [3,5,2,7,3,8,1,2,4,8,9,3]
>>> unique = set(arr)
>>> unique
{1, 2, 3, 4, 5, 7, 8, 9}

El paso número 2, las estadísticas de cada número aparece en la lista

Sabemos que la lista de objetos viene un count () devuelve el método del número de un elemento puede aparecer en la lista se utilizan de la siguiente manera:

>>> arr = [3,5,2,7,3,8,1,2,4,8,9,3]
>>> arr.count(8) # 元素8在数组arr中出现过2次
2

A continuación, sólo tienen que recorrer cada elemento de-de duplicado, uno por uno para contar el número de sus respectivos aparecer, y guardarlo como una estructura de datos adecuada, que es necesario seguir trabajando.

>>> arr = [3,5,2,7,3,8,1,2,4,8,9,3]
>>> unique = set(arr) # 去除重复元素
>>> pairs = list() # 空列表,用于保存数组元素和出现次数组成的元组
>>> for i in unique:
		pairs.append((i, arr.count(i)))
	
>>> pairs
[(1, 1), (2, 2), (3, 3), (4, 1), (5, 1), (7, 1), (8, 2), (9, 1)]

Como un principiante, este código está escrito, ha sido muy buena. Sin embargo, hay una búsqueda del programador no complaciente, estancada. Su actividad favorita es tratar de hacer todo lo posible para destruir el bucle, tales como el uso de la función de mapeo, función de filtro para reemplazar el bucle, y si no se niegan para el reciclaje, van a ocultar lo más posible al ciclo, como escondido en las listas por comprensión. Aquí, ya que es contar una lista de todos los elementos llamadas () Este método, que es el sustituto más adecuado para hacer circular una función de mapa.

>>> m = map(arr.count, unique)
>>> m
<map object at 0x0000020A2D090E08>
>>> list(m) # 生成器可以转成列表
[1, 2, 3, 1, 1, 1, 2, 1]
>>> list(m) # 生成器只能用一次,用过之后,就自动清理了
[]

mapear función devuelve un generador (generador), puede atravesar la misma que la lista, pero no como ver visualmente los diferentes elementos como listas, a menos que utilizamos lista () para encender el generador de la lista (que en realidad no necesita generador en una lista). Tenga en cuenta que los diferentes generadores e iteradores, o Builder es un tipo especial de iterador, sólo puede ser atravesada vez, atravesando el final, desaparece automáticamente. Iterator puede ser atravesada repetidamente. Por ejemplo, variar () devuelve iteradores:

>>> a = range(5)
>>> list(a)
[0, 1, 2, 3, 4]
>>> list(a)
[0, 1, 2, 3, 4]

Tener generadores e iteradores, tenemos que volver al tema original. Uso función mapping, se obtiene el número de ocurrencias de cada elemento, y también necesita un elemento correspondiente que consiste en una tupla. Esta vez, estaban usando la función zip () de. zip () para crear un constructor para la polimerización puede cada objeto iteración (iteradores, generadores, lista, tupla, juego, secuencia, etc.) del elemento, el elemento de polimerizado en el mismo subíndice, se ignora diferentes longitudes mayores de iteración objeto Element longitud más corta.

>>> m = map(arr.count, unique)
>>> z = zip(unique, m)
>>> z
<zip object at 0x0000020A2D490508>
>>> list(z)
[(1, 1), (2, 2), (3, 3), (4, 1), (5, 1), (7, 1), (8, 2), (9, 1)]
>>> list(z)
[]

Obviamente, zip () devuelve la función también el generador sólo se pueden utilizar una vez, y después de que se ha ido.

Paso 3, el número de veces igual al número en sí mismo parece encontrar

Con su número de apariciones de cada elemento, sólo tenemos que recorrer ...... no, espera, ¿por qué tenemos que CICLO? Acabamos de tomar cada filtro nuevo elemento, los elementos propios igual al número de ocurrencias de esas tuplas, por qué no probar el filtro función de filtro () hacer?

>>> def func(x): # 参数x是元组类型
		if x[0] == x[1]:
			return x
	
>>> m = map(arr.count, unique)
>>> z = zip(unique, m)
>>> f = filter(func, z)
>>> f
<filter object at 0x0000020A2D1DD908>
>>> list(f)
[(1, 1), (2, 2), (3, 3)]
>>> list(f)
[]

filtro de función de filtro () acepta dos parámetros, el primer parámetro es una función para determinar si un elemento coinciden con el filtro, el segundo parámetro es la necesidad de filtrar los objetos pueden ser iterativo. función filter () es el retorno del generador, sólo puede ser utilizado una vez, es decir, después de la desaparición.

Escribir aquí, casi hecho. Sin embargo, como una búsqueda de un programador, puede tolerar func () busca una función tan extraña? La respuesta es no! Va a reemplazarlo con una de las funciones lambda. Además, es posible que también tenga que ordenar los resultados de acuerdo con el tamaño del elemento. Además de la clasificación, el código completo es el siguiente:

>>> arr = [3,5,2,7,3,8,1,2,4,8,9,3]
>>> unique = set(arr)
>>> m = map(arr.count, unique)
>>> z = zip(unique, m)
>>> f = filter(lambda x:x[0]==x[1], z)
>>> s = sorted(f, key=lambda x:x[0])
>>> print('幸运数是:', [item[0] for item in s])
幸运数是: [1, 2, 3]

El código final, una cola para entrar

Si alguna vez has sido escrito esa línea, fue capaz de poner en práctica las funciones complejas, las miradas de código como jeroglíficos como los estragos de la amarga experiencia, entonces, ahora se puede poner el código anterior en una sola línea, a los estragos de la otra persona.

>>> arr = [3,5,2,7,3,8,1,2,4,8,9,3]
>>> print('幸运数是:', [item[0] for item in sorted(filter(lambda x:x[0]==x[1], zip(set(arr), map(arr.count, set(arr)))), key=lambda x:x[0])])
幸运数是: [1, 2, 3]
Publicados 101 artículos originales · ganado elogios 10000 + · vistas 1,56 millones +

Supongo que te gusta

Origin blog.csdn.net/xufive/article/details/105215593
Recomendado
Clasificación