Estoy tratando de escribir un programa para determinar el valor máximo de una muestra de un sonido. El ciclo devuelve los valores de todas las muestras, sin embargo, no puedo entender cómo imprimir el más grande.

def largest():
f=pickAFile()
sound=makeSound(f)
for i in range(1,getLength(sound)):
  value=getSampleValueAt(sound,i)
print max([value])
0
ddbg 28 ago. 2014 a las 18:06

3 respuestas

La mejor respuesta

Tratar:

def largest():
    f = pickAFile()
    sound = makeSound(f)
    value = []
    for i in range(1, getLength(sound)):
      value.append(getSampleValueAt(sound, i))
    print max(value)

O

def largest():
    f = pickAFile()
    sound = makeSound(f)
    print max(getSampleValueAt(sound, i) for i in range(1, getLength(sound)))

Con su código, value se sobrescribe en cada iteración. Si hace una lista con todos los valores, puede encontrar el máximo usando max.

Vea también:

3
Community 23 may. 2017 a las 12:22

No recuerdo que estamos tratando con datos de audio. Posiblemente con millones de muestras. Si desea seguir con algo eficiente tanto en el espacio como en el tiempo, debe confiar en lo mucho menos sexy:

def largest():
    f = pickAFile()
    sound = makeSound(f)
    max = getSampleValueAt(sound, 1) # FIX ME: exception (?) if no data
    idx = 2
    while idx < getLength(sound):
        v = getSampleValueAt(sound, i)
        if v > max:
            max = v
        i += 1

    print max

Las soluciones basadas en el generador también son eficientes en términos de espacio, pero para la velocidad, nada podría vencer a un bucle imperativo en Python.

1
Sylvain Leroux 28 ago. 2014 a las 14:27

No lo probé pero tal vez:

def largest():
 f=pickAFile()
 sound=makeSound(f)
 value = [ getSampleValueAt(sound,i) for i in range(1,getLength(sound)) ]
 print max(value)
0
Vizjerei 28 ago. 2014 a las 14:13