[(1,2), (2,3), (4,5), (3,4), (6,7), (6,7), (3,8)]
Bu listedeki her bir diziden 2. değeri nasıl döndürürüm?
Istenilen çıktı:
[2, 3, 5, 4, 7, 7, 8]
Yanıtlar:
Bir liste anlayışı ile .
[x[1] for x in L]
Ignacio'nun cevabı, istediğiniz şeydir. Bununla birlikte, birisi Python da öğrenirken, onu sizin için incelemeye çalışayım ... Daha önce de belirtildiği gibi, bu bir liste anlayışıdır ( örneğin DiveIntoPython3'te ele alınmıştır ). İşte birkaç nokta:
[x[1] for x in L]
[]
Kod satırının etrafına dikkat edin . Bunlar bir listeyi tanımlar. Bu size bu kodun bir liste döndürdüğünü söyler, bu yüzden list
türünün bu. Bu nedenle, bu tekniğe "liste anlama" denir.L = [(1,2),(2,3),(4,5),(3,4),(6,7),(6,7),(3,8)]
yukarıdaki kodu çalıştırmadan önce tanımlamalısınız .x
sadece anlamada var olan bir değişkendir - anlamanın x
dışında erişmeye çalışın veya type(x)
yukarıdaki satırı çalıştırdıktan sonra yazın ve size söyleyecektir NameError: name 'x' is not defined
, oysa type(L)
döner <class 'list'>
.x[1]
işaret ikinci dizilerini her öğenin ise x[0]
ilk öğelerin her işaret olacaktır.Soruyu sormadan önce sorunu ne kadar denediğini söylemek zor, ama belki de anlamaya aşina değildin? DiveIntoPython'un 3. Bölümünü veya anlamayla ilgili herhangi bir kaynağı okumak için biraz zaman harcardım . İyi şanslar.
x
LC'nin dışında, kendisine bağlı son değerle birlikte bulunacaktır. Bu, 3.x'te düzeltilmiştir.
[x[1] for x in [(1,2),(2,3),(4,5),(3,4),(6,7),(6,7),(3,8)]]
ama bu gözler için o kadar kolay değil.
Bunu yapmanın kesinlikle yolu bir listeyi anlamaktır. Daha hızlı olması gereken başka bir yol da map
ve itemgetter
.
import operator
new_list = map(operator.itemgetter(1), old_list)
OP'nin google'da bir cevap bulamadığı yorumuna yanıt olarak, bunu yapmanın süper saf bir yolunu göstereceğim.
new_list = []
for item in old_list:
new_list.append(item[1])
Bu şunları kullanır:
append
Bir listedeki yöntemi çağırmak .Bir kimse bir dil öğrenmeye çalışıyor ve bu temel parçaları kendileri için bir araya getiremiyorsa, o zaman onu bir alıştırma olarak görmeli ve yirmi saat sürse bile kendileri yapmalıdır.
İnsanın ne istediğini nasıl düşüneceğini öğrenmesi ve bunu mevcut araçlarla karşılaştırması gerekir . İkinci cevabımdaki her unsur, temel bir öğreticide ele alınmalıdır. Birini okumadan programlamayı öğrenemezsiniz .
Ayrıca, sırayla paket açmayı şunlarla da kullanabilirsiniz zip
:
L = [(1,2),(2,3),(4,5),(3,4),(6,7),(6,7),(3,8)]
_, res = zip(*L)
print(res)
# (2, 3, 5, 4, 7, 7, 8)
Bu ayrıca _
, atılan ilk öğelerden bir demet oluşturur . Yalnızca ikinciyi çıkarmak mümkündür, ancak daha ayrıntılı:
from itertools import islice
res = next(islice(zip(*L), 1, None))
VEYA şunları kullanabilirsiniz pandas
:
>>> import pandas as pd
>>> L = [(1,2),(2,3),(4,5),(3,4),(6,7),(6,7),(3,8)]
>>> df=pd.DataFrame(L)
>>> df[1]
0 2
1 3
2 5
3 4
4 7
5 7
6 8
Name: 1, dtype: int64
>>> df[1].tolist()
[2, 3, 5, 4, 7, 7, 8]
>>>
Veya numpy
:
>>> import numpy as np
>>> L = [(1,2),(2,3),(4,5),(3,4),(6,7),(6,7),(3,8)]
>>> arr=np.array(L)
>>> arr.T[1]
array([2, 3, 5, 4, 7, 7, 8])
>>> arr.T[1].tolist()
[2, 3, 5, 4, 7, 7, 8]
>>>
a = [(0,2), (4,3), (9,9), (10,-1)]
print(list(map(lambda item: item[1], a)))