OK, tôi hiểu những gì bạn có ý nghĩa và một dòng đơn của Python sẽ đủ:
sử dụng danh sách hiểu
[ j for (i,j) in zip(a,x) if i >= 4 ]
# a will be the list compare to 4
# x another list with same length
Explanation:
>>> a
[1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> x
['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'j']
chức năng Zip sẽ trả về một danh sách các hàng
>>> zip(a,x)
[(1, 'a'), (2, 'b'), (3, 'c'), (4, 'd'), (5, 'e'), (6, 'f'), (7, 'g'), (8, 'h'), (9, 'j')]
List comprehension là một phím tắt để lặp thành phần trong danh sách sau "in" và đánh giá phần tử với biểu thức, sau đó trả về kết quả cho danh sách, bạn cũng có thể thêm điều kiện mà kết quả bạn muốn trả về
>>> [expression(element) for **element** in **list** if condition ]
Mã này không có gì ngoài việc trả lại tất cả các cặp đã được nén lên.
>>> [(i,j) for (i,j) in zip(a,x)]
[(1, 'a'), (2, 'b'), (3, 'c'), (4, 'd'), (5, 'e'), (6, 'f'), (7, 'g'), (8, 'h'), (9, 'j')]
Những gì chúng ta làm là thêm một điều kiện trên nó bằng cách chỉ định "nếu" làm theo bởi một biểu thức boolean
>>> [(i,j) for (i,j) in zip(a,x) if i >= 4]
[(4, 'd'), (5, 'e'), (6, 'f'), (7, 'g'), (8, 'h'), (9, 'j')]
sử dụng Itertools
>>> [ _ for _ in itertools.compress(d, map(lambda x: x>=4,a)) ]
# a will be the list compare to 4
# d another list with same length
Sử dụng itertools.compress với dòng đơn bằng Python để hoàn thành việc này
>>> a = [1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> d = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'j'] # another list with same length
>>> map(lambda x: x>=4, a) # this will return a boolean list
[False, False, False, True, True, True, True, True, True]
>>> import itertools
>>> itertools.compress(d, map(lambda x: x>4, a)) # magic here !
<itertools.compress object at 0xa1a764c> # compress will match pair from list a and the boolean list, if item in boolean list is true, then item in list a will be remain ,else will be dropped
#below single line is enough to solve your problem
>>> [ _ for _ in itertools.compress(d, map(lambda x: x>=4,a)) ] # iterate the result.
['d', 'e', 'f', 'g', 'h', 'j']
Giải thích cho công cụ lặp.nén, tôi nghĩ rằng điều này sẽ được rõ ràng cho sự hiểu biết của bạn:
>>> [ _ for _ in itertools.compress([1,2,3,4,5],[False,True,True,False,True]) ]
[2, 3, 5]
vòng lặp là một nơi tốt để bắt đầu. – monkut
Ví dụ 'idx' của bạn sai, chỉ có ** 9 phần tử ** trong danh sách và do đó ** 9 chỉ mục, 0-8 **. – Aesthete
Câu hỏi của bạn hơi mâu thuẫn với chính nó. Có vẻ như bạn có thể đã nhầm lẫn các chỉ mục với các phần tử (thực tế là 'idx' của bạn là danh sách các phần tử và bạn đang yêu cầu danh sách các chỉ mục). Ngoài ra xin vui lòng cho biết những gì bạn đã thử một mình trước khi yêu cầu? – 0xc0de