2016-02-29 14 views
9

Giả sử tôi có đối tượng danh sách bị chiếm cả số và chuỗi. Nếu tôi muốn lấy mục chuỗi đầu tiên có mức ưu tiên cao nhất theo thứ tự chữ cái, tôi sẽ làm như thế nào?Tìm mục đầu tiên có mức ưu tiên theo thứ tự chữ cái trong danh sách với số

Dưới đây là một cố gắng dụ mà rõ ràng là không chính xác, nhưng sự điều chỉnh như những gì cần phải thay đổi để cho nó để đạt được kết quả mong muốn sẽ được đánh giá rất nhiều:

lst = [12, 4, 2, 15, 3, 'ALLIGATOR', 'BEAR', 'ANTEATER', 'DOG', 'CAT'] 

lst.sort() 
for i in lst: 
    if i[0] == "A": 
     answer = i 
print(answer) 
+3

Điều gì về 'được sắp xếp ([i cho i trong lst nếu isinstance (i, str)]) [0]'? –

+3

Bạn không thể sắp xếp danh sách này bằng Python3 mà không lọc, vì bạn không còn có thể so sánh các loại 'int' và' str' –

Trả lời

8

IIUC bạn có thể sử dụng isinstance để được sublist danh sách ban đầu của bạn chỉ với chuỗi, sau đó với sorted có được yếu tố đầu tiên của phân loại tự chữ cái:

sub_lst = [i for i in lst if isinstance(i, str)] 
result = sorted(sub_lst)[0] 


print(sub_lst) 
['ALLIGATOR', 'BEAR', 'ANTEATER', 'DOG', 'CAT'] 

print(result) 
'ALLIGATOR' 

Hoặc bạn có thể sử dụng min như @ TigerhawkT3 gợi ý trong commen t:

print(min(sub_lst)) 
'ALLIGATOR' 
+8

Hoặc 'min()' thay vì 'được sắp xếp() [0]'. – TigerhawkT3

+3

Lưu ý: việc xác định danh sách (cần thiết để sắp xếp) yêu cầu không gian O (N) và sau đó sắp xếp yêu cầu so sánh O ((N log N), mặt khác, sử dụng 'min' trên biểu thức máy phát chỉ yêu cầu không gian O (1) và so sánh O (N) –

15

đầu tiên sử dụng một generator expression để lọc ra không dây, và sau đó sử dụng min() để chọn chuỗi với sự hiện diện chữ cái cao nhất:

>>> min(x for x in lst if isinstance(x, str)) 
'ALLIGATOR 
+0

@AntonProtopopov, tôi không biết ý bạn là gì "trước hết được chuyển đổi thành danh sách" –

5

Một cách khác là để lọc danh sách chính lst từ intergers sử dụng phương pháp được xây dựng trong filter:

>>> min(filter(lambda s:isinstance(s, str), lst)) 
'ALLIGATOR' 
Các vấn đề liên quan