Necesito preparar 2 listas basadas en los elementos de una lista.
>>> a = ['ether1000', 'ether1000', 'ether1000', 'ether1000', 'ether100Gig', 'ether100Gig']
>>> b = ['1/11/5', '1/11/6', '1/11/7', '1/11/8', '1/6/1', '1/6/2']
Necesito mapear elementos de la lista a
a elementos de la lista b
y hacer una nueva lista de la lista b
para la que tiene la lista b ether1000
.
Entonces estas deberían ser las listas resultantes:
res1 = ['ether1000', 'ether1000', 'ether1000', 'ether1000']
res2 = ['1/11/5', '1/11/6', '1/11/7', '1/11/8']
res3 = ['ether100Gig', 'ether100Gig']
res4 = ['1/6/1', '1/6/2']
Intenté hacer zip de 2 listas:
>>> zip(a, b)
[('ether1000', '1/11/5'), ('ether1000', '1/11/6'), ('ether1000', '1/11/7'), ('ether1000', '1/11/8'), ('ether100Gig', '1/6/1'), ('ether100Gig', '1/6/2')]
>>> c = zip(a,b)
>>> for i in c:
... if 'ether1000' in i:
... d.append[i(1)]
...
Traceback (most recent call last):
File "<stdin>", line 3, in <module>
TypeError: 'tuple' object is not callable
Pero a partir de esto, no estoy seguro de cómo puedo extraer elementos con ether1000
valor y hacer 2 listas como arriba. Sería bueno si alguien me pudiera dar una pista sobre cómo resolver esto.
Edición basada en respuestas:
Tengo estas 2 listas, ¿hay alguna forma de que pueda hacer otras dos listas res3 y res4?
>>> [el[0] for el in c if 'ether1000' in el]
['ether1000', 'ether1000', 'ether1000', 'ether1000']
>>> [i[1] for i in zip(a,b) if 'ether1000' in i]
['1/11/5', '1/11/6', '1/11/7', '1/11/8']
El problema es con la línea d.append[i(1)]
, en su lugar deberías usar:
# v `(..)` for function call
d.append(i[1])
# ^ for fetching the index
# Since you want to access the index, you need to use `i[1]`
Aquí está el ejemplo para su entrada:
>>> a = ['ether1000', 'ether1000', 'ether1000', 'ether1000', 'ether100Gig', 'ether100Gig']
>>> b = ['1/11/5', '1/11/6', '1/11/7', '1/11/8', '1/6/1', '1/6/2']
>>> res1, res2, res3, res4 = [], [], [], []
>>> for i, j in zip(a, b):
... if i == 'ether1000':
... res1.append(i)
... res2.append(j)
... else:
... res3.append(i)
... res4.append(j)
...
>>> res1
['ether1000', 'ether1000', 'ether1000', 'ether1000']
>>> res2
['1/11/5', '1/11/6', '1/11/7', '1/11/8']
>>> res3
['ether100Gig', 'ether100Gig']
>>> res4
['1/6/1', '1/6/2']
Sin embargo, puede simplificar su respuesta usando la comprensión de listas con zip
como:
>>> res1, res2 = zip(* [i for i in zip(a,b) if 'ether1000' in i[0]])
>>> res1
('ether1000', 'ether1000', 'ether1000', 'ether1000')
>>> res2
('1/11/5', '1/11/6', '1/11/7', '1/11/8')
# These are the `tuple` values instead of `list` but I don't think it matters for you
>>> res3, res4 = zip(* [i for i in zip(a,b) if 'ether1000' not in i[0]])
>>> res3
('ether100Gig', 'ether100Gig')
>>> res4
('1/6/1', '1/6/2')
Pero en el enfoque de comprensión de listas, iterará su lista inicial dos veces. Sugeriré usar el primer enfoque.
Este artículo se recopila de Internet, indique la fuente cuando se vuelva a imprimir.
En caso de infracción, por favor [email protected] Eliminar
Déjame decir algunas palabras