2016-05-09 18 views
10

Bir tuple'ı bir tuple listesinden en küçük ikinci dizin değerini (y değeri) döndürmeye çalışıyorum. En düşük y değerine sahip iki tuple varsa, en büyük x değerine (yani ilk indeks) sahip olan tuple'ı seçin.Tuple'ları listeden en küçük y değeriyle döndürme

Örneğin, başlığın olduğunu varsayalım:

x = [(2, 3), (4, 3), (6, 9)] 

değeri (4, 3) olmalıdır döndü. (2, 3) bir adaydır, x[0][1]3 (x[1][1] ile aynıdır), ancak x[0][0]x[1][0]'dan daha küçüktür.

start_point = min(x, key = lambda t: t[1]) 

Ancak bu sadece kontroller ikinci indeks ve onların ikinci indeks eşdeğer olup olmadığını iki tuples ilk indeksi karşılaştırmak değildir:

Şimdiye kadar ben denedim.

+5

Bu gibi bir deneyin olabilir: 'dakika (x, anahtar = lambda t: [t [1] -t [0]])' –

cevap

16

x değerini anahtardan döndürülen bir kümeye dahil edin; Anahtardaki bu ikinci eleman, y değeri için bir kravat olduğunda kullanılır. -4-2 daha küçüktür, Sonuçta

min(x, key=lambda t: (t[1], -t[0])) 

: karşılaştırma (en küçükten en büyüğe kadar) ters için, sadece bu değeri inkâr.

Gösteri:

>>> x = [(2, 3), (4, 3), (6, 9)] 
>>> min(x, key=lambda t: (t[1], -t[0])) 
(4, 3) 
+0

neden -t 'eksi [0] '? Bu bir eleştiri değil, sadece anlamıyorum ... –

+3

@ByteCommander: Çünkü bir bağda * büyük * 'x' değeri seçilmelidir, daha küçük değil. –

+0

Teşekkür ederim, mükemmel çalışıyor. Ve sadece bir satır gerekli! – Seb

İlgili konular