Câu trả lời:
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]
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
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).
Đọ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ạo và yield
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 ) )
if x == 1
nên làif x == value
[tup for tup in a if tup[0] == 1]
for item in a:
if 1 in item:
print item
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)]
>>>
Các filter
chứ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))
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ể