Python - Comparar subelementos de una lista

 
Vista:

Comparar subelementos de una lista

Publicado por CARMEN (13 intervenciones) el 01/11/2017 10:19:33
Quiero ver si hay una forma mas fácil de comparar subelementos de una lista. Por ejemplo si tengo unas cantidades expresadas asi: años = [[1993, 1994, 1997, 1996, 1999],[1995 1999, 1989, 1654, 1980],[1992, 1980, 1981, 1985, 1987]]
Y ahora quiero comparar el primer subelemento de cada elemento, y mi solución es un programa muy largo:
if años[0][0] > años[1][0] and años [2][0]:
print "El primero es el mayor"

POR ESO QUIERO VER SI ALGUIEN TIENE UNA FORMA PARA COMPARAR QUE NO ME SALGA UN PROGRAMA TAN COMPLEJO Y LARGO
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de xve
Val: 2.239
Plata
Ha mantenido su posición en Python (en relación al último mes)
Gráfica de Python

Comparar subelementos de una lista

Publicado por xve (1646 intervenciones) el 01/11/2017 18:06:27
Hola Carmen, entiendo que lo suyo es hacer un bucle, pero... que estas buscando? el año mas alto?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Comparar subelementos de una lista

Publicado por Carmen (13 intervenciones) el 02/11/2017 08:51:27
Si, me dan una serie de tiempos y cadasubelemento es una etapa, entonces tengo que comparar los elementos, y los subelementos y decir cuál es menor.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Antoni Masana
Val: 121
Ha mantenido su posición en Python (en relación al último mes)
Gráfica de Python

Comparar subelementos de una lista

Publicado por Antoni Masana (67 intervenciones) el 02/11/2017 10:47:05
El codigo seria esto:

1
2
3
4
5
6
7
8
9
10
11
12
13
Ano =  [1993, 1994, 1997, 1996, 1999], [1995, 1999, 1989, 1654, 1980], [1992, 1980, 1981, 1985, 1987]
 
for a in range(0,5):
    if Ano[0][a] < Ano[1][a]:
        if Ano[0][a] < Ano[2][a]:
            print(a, Ano[0][a], " -A-")
        else:
            print(a, Ano[2][a], " -C-")
    else:
        if Ano[1][a] < Ano[2][a]:
            print(a, Ano[1][a], " -B-")
        else:
            print(a, Ano[2][a], " -C-")

Y el resultado este:

1
2
3
4
5
0 1992  -C-
1 1980  -C-
2 1981  -C-
3 1654  -B-
4 1980  -B-


Con menos líneas:

1
2
3
4
5
6
7
8
9
Ano =  [1993, 1994, 1997, 1996, 1999], [1995, 1999, 1989, 1654, 1980], [1992, 1980, 1981, 1985, 1987]
 
for a in range(0,5):
    if Ano[0][a] < Ano[1][a]:
        if Ano[0][a] < Ano[2][a]:  print(a, Ano[0][a], " -A-")
        else:                      print(a, Ano[2][a], " -C-")
    else:
        if Ano[1][a] < Ano[2][a]:  print(a, Ano[1][a], " -B-")
        else:                      print(a, Ano[2][a], " -C-")

Saludos.
\\//_
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de kip
Val: 1.120
Bronce
Ha mantenido su posición en Python (en relación al último mes)
Gráfica de Python

Comparar subelementos de una lista

Publicado por kip (257 intervenciones) el 02/11/2017 15:08:45
Hola Antoni creo que el código es muy inflexible ya que tienes números constantes de iteracion en lugar de que sean variables, si yo modifico el numero de elementos de las sublistas tu código no funcionara.....

Lo que yo haría seria algo así:

1
2
3
4
5
6
7
8
9
10
years = [
    [1993, 1994, 1997, 1996, 1999],
    [1995, 1999, 1989, 1654, 1980],
    [1992, 1980, 1981, 1985, 1987]
]
 
higherYears = list(map(max, zip(*years)))
lowerYears = list(map(min, zip(*years)))
 
print('Años mayores {}\nAños menores {}'.format(higherYears, lowerYears))

De esa forma obtendria esto:
1
2
Años mayores [1995, 1999, 1997, 1996, 1999]
Años menores [1992, 1980, 1981, 1654, 1980]

Es decir obtener el año menor y mayor de n posicion de cada sublista en la lista.

Ahora si se quiere mostrar que posición y que año seria algo asi:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
years = [
    [1993, 1994, 1997, 1996, 1999],
    [1995, 1999, 1989, 1654, 1980],
    [1992, 1980, 1981, 1985, 1987]
]
 
higherYears = list(
    map(
        lambda v: max(enumerate(v), key=lambda x: x[1]),
        zip(*years)
    )
)
 
lowerYears = list(
    map(
        lambda v: min(enumerate(v), key=lambda x: x[1]),
        zip(*years)
    )
)
 
for i, year in enumerate(higherYears):
    print(
        'De la tanda {} el {}° es el mayor, ese año es {}'.format(i, year[0] + 1, year[1])
    )
 
for i, year in enumerate(lowerYears):
    print(
        'De la tanda {} el {}° es el menor, ese año es {}'.format(i, year[0] + 1, year[1])
    )

Algo mas largo el código pero simplemente por mostrar la información ya obtenida que seria:

1
2
3
4
5
6
7
8
9
10
De la tanda 0 el 2° es el mayor, ese año es 1995
De la tanda 1 el 2° es el mayor, ese año es 1999
De la tanda 2 el 1° es el mayor, ese año es 1997
De la tanda 3 el 1° es el mayor, ese año es 1996
De la tanda 4 el 1° es el mayor, ese año es 1999
De la tanda 0 el 3° es el menor, ese año es 1992
De la tanda 1 el 3° es el menor, ese año es 1980
De la tanda 2 el 3° es el menor, ese año es 1981
De la tanda 3 el 2° es el menor, ese año es 1654
De la tanda 4 el 2° es el menor, ese año es 1980

Usando for podria quedar asi:

1
2
3
4
5
6
7
8
9
years = [
    [1993, 1994, 1997, 1996, 1999],
    [1995, 1999, 1989, 1654, 1980],
    [1992, 1980, 1981, 1985, 1987]
]
 
for n in range(len(min(years))):
    yearsInPos = [year[n] for year in years]
    print('Tanda {} -> Año mayor {} - Año menor {}'.format(n, max(yearsInPos), min(yearsInPos)))

1
2
3
4
5
Tanda 0 -> Año mayor 1995 - Año menor 1992
Tanda 1 -> Año mayor 1999 - Año menor 1980
Tanda 2 -> Año mayor 1997 - Año menor 1981
Tanda 3 -> Año mayor 1996 - Año menor 1654
Tanda 4 -> Año mayor 1999 - Año menor 1980
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar