2010-02-03 42 views

Trả lời

149

Nếu bạn chỉ muốn số đầu tiên để phù hợp bạn có thể làm điều đó như thế này:

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

Nếu bạn chỉ tìm kiếm dữ liệu với 1 trong đó:

[item for item in a if 1 in item] 
+12

Ah, danh sách hiểu. – HelloGoodbye

15

Đọc trên List Comprehensions

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

Cũng đọc lên generator functionsyield tuyên bố.

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

result= list(filter_value(a, 1)) 
+0

'nếu x == 1' phải là' nếu x == giá trị ' – sambha

7
[tup for tup in a if tup[0] == 1] 
73

Có thực sự là một cách thông minh để làm điều này đó là hữu ích cho bất kỳ danh sách các hàng nơi kích thước của mỗi tuple là 2: bạn có thể chuyển đổi danh sách của bạn thành một cuốn từ điển duy nhất.

Ví dụ,

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

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

+1

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

+4

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 mà bộ tuple 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ụ về OP, điều này sẽ trả về (1,4) trái với cả (1,2) và (1,4). – BBischof

0

Chức năng filter 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)) 

những tìm kiếm các bản ghi trong danh sách cho bất kỳ xảy ra 1. Nếu tìm kiếm được giới hạn ở những yếu 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

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

>>> def get_values(iterables, key_to_find):
return list(filter(lambda x:key_to_find in x, iterables)) >>> a = [(1,2),(1,4),(3,5),(5,7)] >>> get_values(a, 1) >>> [(1, 2), (1, 4)]
Các vấn đề liên quan