def split_comp(compstr). """ Tách một chuỗi chứa thành phần của dung dịch rắn perovskite thành các thành phần của nó Thành phần hóa học. (am_1, am_2)(tm_1, tm_2)Sửu. tham số compstr. thành phần như một chuỗi. trở về. sáng_1, sáng_2, sáng_1, sáng_2; . e. ("Fe", 0. 6) """ am_1, am_2, tm_1, tm_2 = Không, Không, Không, Không compstr_spl = ["". tham gia (g) cho _, g trong nhóm (str (compstr), str. isalpha)] cho l trong phạm vi(len(compstr_spl)). thử. nếu ( ptable. Phần tử(compstr_spl[l]). is_alkaline hoặc ptable. Phần tử(compstr_spl[l]). is_alkali hoặc ptable. Phần tử(compstr_spl[l]). is_rare_earth_metal ). nếu am_1 là Không có. am_1 = [compstr_spl[l], float(compstr_spl[l + 1])] elif am_2 là Không có. am_2 = [compstr_spl[l], float(compstr_spl[l + 1])] nếu ptable. Phần tử(compstr_spl[l]). is_transition_metal và không ( ptable. Phần tử(compstr_spl[l]). is_rare_earth_metal ). nếu tm_1 là Không có. tm_1 = [compstr_spl[l], float(compstr_spl[l + 1])] elif tm_2 là Không có. tm_2 = [compstr_spl[l], float(compstr_spl[l + 1])] # phép cân bằng hóa học tăng ValueErrors trong pymatgen. is_alkaline, v.v. , hãy bỏ qua những lỗi này và bỏ qua mục đó ngoại trừ ValueError. vượt qua trở lại am_1, am_2, tm_1, tm_2 Hàm itertools trong Python cung cấp một cách hiệu quả để lặp danh sách, bộ dữ liệu và từ điển. itertools. chức năng groupby trong itertools sẽ được áp dụng trong hướng dẫn này để nhóm danh sách từ điển theo một khóa cụ thể Show Để minh họa cách thức hoạt động của tính năng này, chúng ta sẽ xem danh sách thông tin về sinh viên (trong từ điển) và cố gắng nhóm những thông tin này theo khóa “lớp”, chẳng hạn như… Vì vậy, bạn muốn tìm hiểu về itertools. groupby(), thì bạn đang ở đúng nơi. itertools. groupby() là một phần của itertools mô-đun python, một tập hợp các công cụ được sử dụng để xử lý các trình vòng lặp. Tất cả các phương thức/công cụ của itertools tạo nên đại số của iter. Itertools sẽ làm cho mã của bạn nổi bật. Trên hết, nó sẽ làm cho nó trở nên Pythonic hơn Người ta sẽ đặt câu hỏi về sự cần thiết của itertools. Chúng nhanh hơn và hiệu quả hơn nhiều về bộ nhớ trên các cấu trúc dữ liệu có thể lặp lại Các itertools có các loại sau
Mặc dù thư viện itertools chứa nhiều chức năng có giá trị, nhưng trong bài viết này, chúng tôi sẽ tập trung vào itertools. groupby() để chấm dứt trình vòng lặp, bạn có thể xem các phương pháp khác tại đây nội dung
giải mã itertools. theo nhóm ()Phương thức groupby() của itertools đi qua một giá trị có thể lặp lại và nhóm dựa trên một khóa cụ thể. Sau đó, nó trả về một iterator(stream of tuples) Giá trị đầu tiên của bộ bao gồm các khóa, trên đó các mục của iterable được nhóm lại. Giá trị thứ hai của tuple sẽ là một trình vòng lặp chứa tất cả các mục được nhóm theo khóa. Nếu bạn cảm thấy có quá nhiều thứ để tiếp nhận, đừng lo lắng; Nhập itertools. theo nhóm ()# want to use it like itertools.groupby() import itertools # want to use directly from itertools import groupby cú pháp
Các thông số của itertools. theo nhóm ()
loại trả lạiitertools. groupby() trả về một trình vòng lặp với các luồng bộ dữ liệu bên trong Trình lặpphức tạpitertools. groupby() có độ phức tạp thời gian O(n) Ví dụ cho itertools. theo nhóm ()ví dụ 1Hãy bắt đầu với một ví dụ cơ bản nhất import itertools string = 'aaaabbbbbbcccdddddd' string_tuple = itertools.groupby(string) print(string_tuple, type(string_tuple)) Hãy xem qua đoạn mã trên
for item in string_tuple: print(item)
for key, iter_item in string_tuple: print(f"Key:{key}") for item in iter_item: print(item,end=" ") print()
Phổ biến bây giờ Hướng dẫn cơ bản về Python __all__ ví dụ 2Hãy lấy một ví dụ; import itertools anagrams =['angel','below','glean','bored','robed','study','dusty','cat','act','inch','chin','taste','state','elbow'] grouped_anagrams = [list(group) for key, group in itertools.groupby(sorted(anagrams, key=sorted),sorted)] print(grouped_anagrams)đầu ra. đảo chữ được nhóm bằng cách sử dụng itertools. theo nhóm () Hãy chia nhỏ mã được cung cấp ở trên
Phổ biến bây giờ Mọi thứ về Python SortedDict Ví dụ thực tế về groupbystudents = [ { 'name':'Teri Howard', 'state':'CA' }, { 'name':'Stephen Reyes', 'state':'CA' }, { 'name':'Thalia Franklin', 'state':'CA' }, { 'name':'Yvonne Slater', 'state':'Tx' }, { 'name':'Rolf Wilcher', 'state':'Tx' }, { 'name':'Teri Dinwiddie', 'state':'MS' }, { 'name':'Fred Greer', 'state':'AL' }, { 'name':'Lane Snee', 'state':'AL' } ] def get_state(students): return students['state'] grouped_students = itertool.groupby(students, get_state) for state, students in grouped_student: print(f"State: {state}") for student in students: print(f"Students: {student}", end=" ") print()
itertools. nhóm trên mảng 2-Dimport itertools key_func = lambda x:x[0] organims = [['land','lion'],['aquatic','shark'],['air','eagle'],['land','bear'],['land','monkey'],['aquatic','octopus']] for key, group in itertools.groupby(sorted(organims,key=key_func),key_func): print('{}: {}'.format(key,[i[1] for i in group]))Phương pháp nhóm trên mảng 2 chiều xu hướng [Đã sửa] ModuleNotFoundError. Không có mô-đun nào có tên Pycocotools Câu hỏi thường gặp trên itertools. theo nhóm ()Q1. itertools. groupby() không nhóm chính xác? itertools. groupby() thu thập các mục liền kề với nhau bằng cùng một khóa. Nói cách khác, việc sắp xếp các lần lặp lại của bạn sẽ giúp bạn tránh khỏi bất kỳ sự khác biệt hoặc lỗi nào quý 2. Nhóm của SQL so với nhóm của Python Một sự khác biệt đáng kể giữa hai loại này là trong trường hợp nhóm của SQL, không cần sắp xếp dữ liệu. Tuy nhiên, trong phương pháp nhóm của Python, điều này là cần thiết để tránh lỗi và sai lệch Q3. Lỗi. itertools. groupby() không có len() Vì itertools groupby trả về một trình vòng lặp, nên đó là một luồng các bộ dữ liệu. Vì len() bị giới hạn trong các lần lặp, nên nói một cách đơn giản, nó sẽ không hoạt động. Thay vào đó, bạn có thể chuyển đổi nó thành một danh sách và tìm độ dài. Nhưng thay vì làm đầy bộ nhớ, bạn có thể bắt đầu một biến đếm, tăng nó bằng một vòng lặp và lấy độ dài |