Tuples listesindeki bir öğeyi bulma


140

'A' listem var

a= [(1,2),(1,4),(3,5),(5,7)]

Belirli bir sayı için tüm kaplumbağaları bulmam gerekiyor. 1 için söyle

result = [(1,2),(1,4)]

Bunu nasıl yaparım?

Yanıtlar:


236

Sadece ilk sayının eşleşmesini istiyorsanız, bunu şu şekilde yapabilirsiniz:

[item for item in a if item[0] == 1]

İçinde 1 olan tuples arıyorsanız:

[item for item in a if 1 in item]

115

Aslında bunu yapmanın zekice bir yolu var, bu da her bir grubun boyutunun 2 olduğu herhangi bir grup listesi için yararlıdır: listenizi tek bir sözlüğe dönüştürebilirsiniz.

Örneğin,

test = [("hi", 1), ("there", 2)]
test = dict(test)
print test["hi"] # prints 1

11
Bunu Bruce'un problemine nasıl uygularsınız?
HelloGoodbye

5
İyi cevap (muhtemelen bu soru için değil). Bir değerin seçim tuples listesinde olup olmadığını belirlemek için iyi çalıştı (örneğin; testte "hi" ise)
MagicLAMP

10
MagicLAMP'ın önerdiği gibi, soruya gerçekten cevap vermiyor. Özellikle, dict(X)X'i herhangi bir ortak ilk öğenin son grubunun kullanılan değer olduğu bir sözlüğe dönüştürür. OP örneğinde bu, hem (1,2) hem de (1,4) yerine (1,4) değerini döndürür.
BBischof





1

filterFonksiyonu da ilginç bir çözüm sağlayabilir:

result = list(filter(lambda x: x.count(1) > 0, a))

herhangi bir oluşum için listede tuples arar 1. Arama ilk elemanla sınırlıysa, çözüm şu şekilde değiştirilebilir:

result = list(filter(lambda x: x[0] == 1, a))

1

Filtre fonksiyonunu kullanma:

>>> def get_values ​​(yineleme sayısı, key_to_find):
dönüş listesi (filtre (lambda x: key_to_find in x, yinelenebilir)) >>> a = [(1,2), (1,4), (3,5), (5,7)] >>> get_values ​​(a, 1) >>> [(1, 2), (1, 4)]

1

Veya takewhile, (buna ek olarak, daha fazla değer örneği gösterilir):

>>> a= [(1,2),(1,4),(3,5),(5,7),(0,2)]
>>> import itertools
>>> list(itertools.takewhile(lambda x: x[0]==1,a))
[(1, 2), (1, 4)]
>>> 

sıralanmamışsa, örneğin:

>>> a= [(1,2),(3,5),(1,4),(5,7)]
>>> import itertools
>>> list(itertools.takewhile(lambda x: x[0]==1,sorted(a,key=lambda x: x[0]==1)))
[(1, 2), (1, 4)]
>>> 

0

tuple içinde mevcut olan herhangi bir sayı için tuple aramak istiyorsanız,

a= [(1,2),(1,4),(3,5),(5,7)]
i=1
result=[]
for j in a:
    if i in j:
        result.append(j)

print(result)

if i==j[0] or i==j[index]Belirli bir dizinde bir numarayı aramak istiyorsanız da kullanabilirsiniz

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.