Đây là phiên bản cố định [cảm ơn bạn đã chỉ ra lỗi]fixed version [thank you for pointing out bugs]
def frequency[s]:
return ''.join[
[k for k, v in
sorted[
reduce[
lambda d, c: d.update[[[c, d.get[c, 0] + 1]]] or d,
list[s],
dict[]].items[],
lambda a, b: cmp[a[1], b[1]],
reverse=True]]]
Tôi nghĩ rằng việc sử dụng reduce
tạo ra sự khác biệt trong sự thay đổi này so với những người khác ...
Trong hành động:
>>> from frequency import frequency
>>> frequency['abbbccddddxxxyyyyyz']
'ydbxcaz'
Điều này bao gồm trích xuất các phím [và đếm chúng] là tốt !!! Một thuộc tính đẹp khác là khởi tạo từ điển trên cùng một dòng :]includes extracting the keys [and counting them] as well!!! Another nice property is the initialization of the dictionary on the same line :]
Ngoài ra: Không bao gồm, chỉ cần xây dựng.no includes, just builtins.
Hàm reduce
rất khó để quấn đầu tôi và đặt các giá trị từ điển trong
>>> from frequency import frequency
>>> frequency['abbbccddddxxxyyyyyz']
'ydbxcaz'
1 cũng hơi cồng kềnh trong Python, nhưng, à, nó hoạt động!Chương này là từ cuốn sách
Nhận đầu vào chuỗi
Trước khi cuối cùng bạn có thể viết các chương trình thực sự, thì bạn sẽ có thể viết các tập lệnh có thể truy vấn người dùng để biết thêm thông tin. May mắn thay, Python bao gồm một chức năng tích hợp mạnh mẽ, chức năng đầu vào, giúp điều này dễ dàng.input function, which makes this easy.
Tôi sẽ cung cấp cho bạn cú pháp trước và sau đó hiển thị các ví dụ.
string_var = input[prompt_string]
Bản chất của cú pháp này là câu lệnh đầu vào tích hợp cả lấy và tạo ra một chuỗi văn bản. Theo một cách nào đó, khái niệm về chuỗi văn bản rất dễ hiểu; Nó chỉ là những từ ngữ của người Viking trong phần lớn, hay chính xác hơn là các chữ cái và các ký tự khác.input statement both takes and produces a text string. In one way, the concept of text string is easy to understand; it’s just “words” for the most part—or more accurately, letters and other characters.
Ví dụ: chúng ta có thể viết một hàm, chính, mà chúng ta sẽ sử dụng làm kịch bản.
>>>def main[]:
name1_str = input[’Enter your name: ’]
name2_str = input[’Enter another: ’]
name3_str = input[’And another: ’]
print[’Here are all the candidates: ’]
print[name1_str, name2_str, name3_str]
>>>main[]
Enter your name: Brian
Enter another: Hillary
And another: Donald
Here are all the candidates:
Brian Hillary Donald
Điều này tự nó không phải là một chương trình rất thú vị. Nó lấy một số văn bản và hiển thị nó trên bảng điều khiển. Nhưng chương trình nhỏ này cho thấy một khả năng quan trọng của Python: khả năng nhắc người dùng cho một chuỗi văn bản và sau đó gán nó cho một biến.
Mặc dù các biến khác cho đến nay đã đề cập đến các giá trị số, các biến này là NAME1, name2 và name3, tất cả đều đề cập đến các chuỗi văn bản trong trường hợp này.
Chính xác thì những gì có thể đi vào một chuỗi văn bản? Về cơ bản, bất cứ điều gì bạn có thể gõ đều có thể đi trong một chuỗi văn bản. Đây là một ví dụ:
>>>in_str = input[’Enter input line: ’]
Enter input line: When I’m 64...
>>>in_str
’When I’m 64...’
Như bạn có thể thấy, chuỗi văn bản có thể chứa chữ số [ký tự chữ số]. Nhưng cho đến khi họ chuyển đổi, họ chỉ là số. Chúng là các biểu diễn chuỗi văn bản của các số, không phải số bạn có thể thực hiện số học trên.
Nếu điều này không rõ ràng, chỉ cần nhớ rằng số 5 chỉ là một ký tự trên bàn phím hoặc trên màn hình. Nhưng số 5 có thể được nhân đôi hoặc tăng gấp ba để tạo ra 10 hoặc 15 và ít liên quan đến các ký tự trên bàn phím.
Đây là một ví dụ:
in_str = ’55’
Nhưng việc gán 55 không có dấu ngoặc kép xung quanh nó làm điều gì đó khác biệt.
n = 55
Sự khác biệt là 55 là một số thực tế, có nghĩa là bạn có thể thêm, trừ, nhân và chia nó. Nhưng khi được đặt trong các dấu ngoặc kép, thì 55 55 là một chuỗi văn bản. Điều đó có nghĩa là nó là một chuỗi bao gồm hai chữ số, mỗi chữ số A 5, được xâu chuỗi lại với nhau.
Một chương trình đơn giản sẽ giúp minh họa sự khác biệt.
>>>def main[]:
in_str = input[’Enter your age: ’]
print [’Next year you’ll be’, in_str + 1]
>>>main[]
Enter your age: 29
Error! Incompatible types.
Ối! Chuyện gì đã xảy ra thế? Các ký tự 29 đã được nhập tại dấu nhắc và được lưu trữ dưới dạng chuỗi văn bản, nghĩa là một số 2 theo sau là một số 9 một chuỗi dài hai ký tự. Nhưng điều đó không giống như một con số, mặc dù nó trông giống như một.
Python phàn nàn ngay khi bạn cố gắng thêm chuỗi văn bản vào một số.
in_str + 1
Không có lỗi được báo cáo cho đến khi bạn thực hiện chức năng. Các biến Python don lồng có các loại; Chỉ các đối tượng dữ liệu mới làm. Do đó, cú pháp Python có vẻ lỏng lẻo lúc đầu. Nhưng các loại đối tượng dữ liệu mà không được kiểm tra các lỗi cú pháp, vì không có bản khai báo cáo nào, đã kiểm tra bất cứ khi nào một câu lệnh Python thực sự được thực thi.
Điều này có nghĩa là, trong số những thứ khác, bạn không thể thực hiện số học trên một chuỗi các chữ số như 100, cho đến khi chuỗi đó được chuyển đổi thành định dạng số. Nếu điều này không có ý nghĩa bây giờ, thì đừng lo lắng; Nó sẽ có ý nghĩa khi bạn đọc phần tiếp theo.
Phần tiếp theo cho thấy cách nhận đầu vào và lưu trữ nó dưới dạng một số thay vì chuỗi văn bản.