2012-04-04 45 views
9

Tôi có hai danh sách như:Python tìm cực tiểu và cực của hai danh sách

l_one = [2,5,7,9,3] 
l_two = [4,6,9,11,4] 

... và tôi cần phải tìm ra giá trị min và max từ cả hai danh sách cộng lại. Đó là, tôi muốn tạo ra một phút và một giá trị tối đa duy nhất.

Câu hỏi của tôi là - cách pythonic nhất để đạt được điều này là gì?

Bất kỳ trợ giúp nào được đánh giá cao.

+1

Điều này có nên được gắn thẻ bài tập về nhà không? –

Trả lời

25

Có thể cho rằng cách dễ đọc nhất là

max(l_one + l_two) 

hoặc

min(l_one + l_two) 

Nó sẽ sao chép các danh sách, tuy nhiên, kể từ khi l_one + l_two tạo ra một danh sách mới. Để tránh sao chép, bạn có thể làm

max(max(l_one), max(l_two)) 
min(min(l_one), min(l_two)) 
+0

Vì vậy, người đầu tiên sẽ sao chép danh sách và tìm ra câu châm ngôn (đắt tiền hơn trên bộ nhớ). Nhưng những gì về phương pháp thứ hai, nó có tốc độ lâu hơn khôn ngoan? – George

+0

@George: Không, nó cũng nhanh hơn. Điểm bất lợi duy nhất là nó không đọc tốt như cái đầu tiên. –

+0

Bạn có thể giải thích hoặc cung cấp cho tôi các tài nguyên để tôi có thể tìm hiểu lý do đằng sau nó? Tôi có nên hỏi câu hỏi này như một câu hỏi mới không? Hoặc nó rất tầm thường/phụ thuộc vào việc thực hiện. – George

1

Bạn có thể kết hợp chúng và sau đó gọi phút hoặc tối đa:

>>> l_one = [2,5,7,9,3] 
>>> l_two = [4,6,9,11,4] 
>>> min(l_one + l_two) 
2 
>>> max(l_one + l_two) 
11 
10

Một cách khác mà tránh sao chép danh sách

>>> l_one = [2,5,7,9,3] 
>>> l_two = [4,6,9,11,4] 
>>> 
>>> from itertools import chain 
>>> max(chain(l_one, l_two)) 
11 
>>> min(chain(l_one, l_two)) 
2 
1

nếu bạn chỉ có danh sách giống như bạn làm, công trình này, ngay cả với các danh sách từ các kích thước khác nhau:

min(min([i1,i2,i3])) 

Bạn thậm chí có thể có một giải pháp thông minh hơn mà làm việc với mảng NumPy khác nhau:

import numpy as np 
i1=np.array(range(5)) 
i2=np.array(range(4)) 
i3=np.array(range(-5,5)) 
np.min(np.concatenate([i1,i2,i3])) 
0

Nếu bạn muốn chọn tối đa hoặc giá trị tối thiểu từ hai lists.I nghĩ rằng sau đây sẽ làm việc:

from numpy import maximum 
result = maximum(l_one,l_two) 

Nó sẽ trả lại giá trị tối đa sau khi so sánh từng phần tử trong hai danh sách này.

Các vấn đề liên quan