Tìm một phần tử trong danh sách các bộ dữ liệu


139

Tôi có một danh sách 'a'

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

Tôi cần tìm tất cả các bộ dữ liệu cho một số cụ thể. nói cho 1 nó sẽ là

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

Làm thế nào để làm điều đó?

Câu trả lời:


236

Nếu bạn chỉ muốn số đầu tiên khớp với nhau, bạn có thể làm như thế này:

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

Nếu bạn chỉ tìm kiếm bộ dữ liệu có 1 trong số đó:

[item for item in a if 1 in item]

115

Thực sự có một cách thông minh để làm điều này hữu ích cho bất kỳ danh sách các bộ dữ liệu nào trong đó kích thước của mỗi bộ là 2: bạn có thể chuyển đổi danh sách của mình thành một từ điển duy nhất.

Ví dụ,

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

11
Làm thế nào để bạn áp dụng điều này cho vấn đề của Bruce?
HelloGoodbye

5
Câu trả lời tốt (mặc dù có thể không cho câu hỏi này). Làm việc tốt với tôi để xác định xem một giá trị có nằm trong danh sách các bộ dữ liệu lựa chọn hay không (ví dụ: nếu "hi" trong thử nghiệm)
MagicLAMP

10
Nó không thực sự trả lời câu hỏi, như MagicLAMP gợi ý. Cụ thể, dict(X)chuyển đổi X thành một từ điển trong đó bộ dữ liệu cuối cùng của bất kỳ phần tử đầu tiên phổ biến nào, là giá trị được sử dụng. Trong ví dụ của OP, điều này sẽ trả về (1,4) trái ngược với cả (1,2) và (1,4).
BBischof

23

Đọc lên Danh sách toàn diện

[ (x,y) for x, y in a if x  == 1 ]

Cũng đọc lên các chức năng tạoyieldtuyên bố.

def filter_value( someList, value ):
    for x, y in someList:
        if x == value :
            yield x,y

result= list( filter_value( a, 1 ) )

1
if x == 1nên làif x == value
sambha



1

Sử dụng chức năng lọc:

>>> def get_values ​​(lặp lại, key_to_find):
danh sách trả về (bộ lọc (lambda x: key_to_find trong x, iterables)) >>> a = [(1,2), (1,4), (3,5), (5,7)] >>> get_values ​​(a, 1) >>> [(1, 2), (1, 4)]


1

Hoặc takewhile, (ngoài điều này, ví dụ về nhiều giá trị được hiển thị):

>>> 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)]
>>> 

nếu chưa được sắp xếp, như:

>>> 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

Các filterchức năng cũng có thể cung cấp một giải pháp thú vị:

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

tìm kiếm các bộ dữ liệu trong danh sách cho bất kỳ sự xuất hiện của 1. Nếu tìm kiếm bị giới hạn ở phần tử đầu tiên, giải pháp có thể được sửa đổi thành:

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

0

Nếu bạn muốn tìm kiếm tuple cho bất kỳ số nào có trong tuple thì bạn có thể sử dụng

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)

Bạn cũng có thể sử dụng if i==j[0] or i==j[index]nếu bạn muốn tìm kiếm một số trong chỉ mục cụ thể

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.