Sử dụng NumPy, bạn phải nhập mô-đun NumPy. Nhưng đây là một giải pháp khác, chỉ đếm số lần lặp lại của mọi phần tử trong danh sách
nhập numpy dưới dạng số np = [1, 2, 3, 4, 2, 3, 5] đếm = np. bincount[số] np. trong đó [[đếm > 1]][1] in [đếm]đầu ra. [0 1 2 2 1 1]
Hãy bình luận nếu bạn có bất kỳ câu hỏi hoặc đề xuất nào về hướng dẫn danh sách Python này
Ghi chú. IDE. PyCharm2021. 3 [Phiên bản cộng đồng]
cửa sổ 10
Trăn 3. 10. 1
Tất cả các ví dụ về Python đều có trong Python3, vì vậy có thể nó khác với python 2 hoặc các phiên bản nâng cấp
Bằng cấp về Khoa học Máy tính và Kỹ sư. Nhà phát triển ứng dụng và có kinh nghiệm về nhiều ngôn ngữ lập trình. Đam mê công nghệ & thích học hỏi kỹ thuật
Chia sẻ cái này
- Hơn
- In
- Tumblr
- Túi
- điện tín
- Ứng dụng trò chuyện
Có liên quan
Phần tử không lặp lại
Tìm phần tử không lặp lại đầu tiên trong một mảng các số nguyên đã cho
ví dụ
Đầu vào. -1 2 -1 3 2 Đầu ra. 3 Giải thích. Số đầu tiên không lặp lại là. 3 đầu vào. 9 4 9 6 7 4 Đầu ra. 6Cách tìm các bản sao từ danh sách trong Python
Kiểm tra xem một danh sách có các Phần tử trùng lặp hay không bằng cách sử dụng Bộ
Chúng tôi biết rằng các bộ trong Python chỉ chứa các phần tử duy nhất. Chúng ta có thể sử dụng thuộc tính này của tập hợp để kiểm tra xem danh sách có phần tử trùng lặp hay không
Đối với điều này, chúng tôi sẽ tạo một tập hợp từ các phần tử của danh sách. Sau đó, chúng tôi sẽ kiểm tra kích thước của danh sách và tập hợp. Nếu kích thước của cả hai đối tượng bằng nhau, nó sẽ xác nhận rằng danh sách không có phần tử trùng lặp. Nếu kích thước của tập hợp lớn hơn danh sách, điều đó có nghĩa là danh sách chứa các phần tử trùng lặp. Chúng ta có thể hiểu điều này từ ví dụ sau
chắc chắn check_duplicate[l]. mySet = set[l] if len[mySet] == len[l]. print["Danh sách không có phần tử trùng lặp. "] khác. print["Danh sách chứa các phần tử trùng lặp"] list1 = [1, 2, 3, 4, 5, 6, 7] print["Danh sách 1 là. ", list1] check_duplicate[list1] list2 = [1, 2, 1, 2, 4, 6, 7] print["List2 la. ", list2] check_duplicate[list2]đầu ra
Danh sách1 là. [1, 2, 3, 4, 5, 6, 7] Danh sách không có phần tử trùng lặp. Danh sách2 là. [1, 2, 1, 2, 4, 6, 7] Danh sách chứa các phần tử trùng lặpTheo cách tiếp cận trên, chúng ta cần tạo một tập hợp từ tất cả các phần tử của danh sách. Sau đó, chúng tôi cũng kiểm tra kích thước của tập hợp và danh sách. Các hoạt động này rất tốn kém
Thay vì sử dụng phương pháp này, chúng ta chỉ có thể tìm kiếm phần tử trùng lặp đầu tiên. Để làm điều này, chúng tôi sẽ bắt đầu từ phần tử đầu tiên của danh sách và sẽ tiếp tục thêm chúng vào tập hợp. Trước khi thêm các phần tử vào tập hợp, chúng ta sẽ kiểm tra xem phần tử đó đã có trong tập hợp hay chưa. Nếu có, danh sách chứa các phần tử trùng lặp. Nếu chúng ta có thể thêm từng phần tử của danh sách vào tập hợp, thì danh sách không chứa bất kỳ phần tử trùng lặp nào. Điều này có thể được hiểu từ ví dụ sau
Tạo từ điển, sử dụng các mục Danh sách làm khóa. Điều này sẽ tự động loại bỏ mọi trùng lặp vì từ điển không thể có khóa trùng lặp
Tạo từ điển
mylist = ["a", "b", "a", "c", "c"]
mylist = list[dict. fromkeys[mylist]]
print[mylist]
Sau đó, chuyển từ điển trở lại thành danh sách
Chuyển đổi thành một danh sách
mylist = ["a", "b", "a", "c", "c"]
mylist = list[dict. fromkeys[mylist]]
print[mylist]
Bây giờ chúng tôi có một Danh sách không có bất kỳ bản sao nào và nó có cùng thứ tự với Danh sách ban đầu
In Danh sách để chứng minh kết quả
In danh sách
mylist = ["a", "b", "a", "c", "c"]
mylist = list[dict. fromkeys[mylist]]
print[mylist]
Tạo một chức năng
Nếu bạn muốn có một chức năng mà bạn có thể gửi các danh sách của mình và nhận lại chúng mà không bị trùng lặp, bạn có thể tạo một chức năng và chèn mã từ ví dụ trên
Cho một mảng các số nguyên kích thước N, nhiệm vụ là tìm phần tử không lặp lại đầu tiên trong mảng này.
ví dụ
Đầu vào. {-1, 2, -1, 3, 0}
Đầu ra. 2
Giải thích. Số đầu tiên không lặp lại là. 2Đầu vào. {9, 4, 9, 6, 7, 4}
Đầu ra. 6
Đề nghị thực hành
Phần tử không lặp lại
Thử nó
Tìm phần tử không lặp lại đầu tiên trong một Mảng số nguyên đã cho bằng cách sử dụng Vòng lặp lồng nhau
Cách tiếp cận này dựa trên ý tưởng sau
Giải pháp đơn giản là sử dụng hai vòng. Vòng lặp bên ngoài chọn từng phần tử một và vòng lặp bên trong kiểm tra xem phần tử có xuất hiện nhiều lần hay không
Hình minh họa
Cho arr[] = {-1, 2, -1, 3, 0}
Đối với phần tử tại i = 0.
- Giá trị của phần tử tại chỉ số 2 là như nhau thì đây không thể là phần tử không lặp đầu tiên
Đối với phần tử tại i = 1
- Sau khi duyệt qua mảng arr[1] không có mặt không có trong mảng ngoại trừ lúc 1
Do đó, phần tử có chỉ số 1 là phần tử không lặp lại đầu tiên là 2
Thực hiện theo các bước dưới đây để giải quyết vấn đề đã cho.
- Lặp lại mảng từ bên trái
- Kiểm tra từng phần tử nếu sự hiện diện của nó trong mảng nhiều hơn 1 lần
- Sử dụng một vòng lặp lồng nhau để kiểm tra sự hiện diện
Dưới đây là triển khai ý tưởng trên
C++
658
659
660
661
662
663
664
665
664
61
664
63
64
65
66
65
68
69
664
6581
________ 2582 ________ 264 ________ 2584
6582
6586
6582
68
6589
6590
6591
6592
________ 2593 ________ 2594 ________ 2595
6582
6597
6582
6599
6582
6591
6602
________ 2590 ________ 2604 ________ 2605
65
6607
65
6604
6610
6607
6612
664
6614
64
65
664
6618
65
664
6621____2622
6623
6622
6625
65
6627
65
6604
6630
6607
Java
6632
6633
6634
6635
65
6637
664
665
664
61
664
63
65
64
6582
66
6582
68
69____264
6652
6653
6654
6590
664
6584
6590
6586
6590
68
602____2653
604
________ 2593 ________ 2591 ________ 2592
608
6594
6595
6590
6597
6590
6599
6590
6591
6602
________ 2593 ________ 2604 ________ 2605
6582
6607
6582
6604
625
626
6595
65
6607
65
6612
65
633
6637
635
636
65
64
6582
664
641
642
643
644
643
642
643
648
643
650
643
644
653
6582
664
656
6582
658
65
6607
6607
662
Python3
663
664
665
666
65
668
65
68
671____072
673
674
6582
676
677
6653
6582
680
________ 2582 ________ 082 ________ 083
6590
6591
686
677
676
689
690
677
677
693
6593
6594
6590
676
698
677
626
6582
65802
6582
65804
6582
6591
65807
677
677
65810
6590
6604
690
________ 05 ________ 2604 ________ 025 ________ 026
65818
65819
677
65821
642
643
644
643
642
643
648
643
650
643
644
65833
65834
677
65836
65837
65838
65839
65840
C#
65841
659
661
65844
6634
6635
65
6637
664
665
664
65852
664
63
65
64
6582
66
6582
68
69____264
6581
6590
664
6584
6590
6586
6590
68
6589
________ 2593 ________ 2591 ________ 2592
608
6594
6595
6590
6597
6590
6599
6590
6591
6602
________ 2593 ________ 2604 ________ 2605
6582
6607
6582
6604
6610
65
6607
65
6612
________ 05 ________ 033 ________ 2637 ________ 035 ________ 25901
65
64
6582
664____25906
6582
664
65909
6582
65911
65
6607
6607
662
PHP
65916
65917
659
65919
665____25921____043
65923
65924
64
65
66
65
68
69_______25931
65932
65931
65934
65923
6595
65931
65938
65
64
6582
65942
6595
6582
6586
6582
68
69
65942
65932
65942
65934
65923
6595
65942
65938
6590
6591
69
65931
65961
65942
65963
65921
65821
65931
65967
65921
65821
65942
65971
________ 2593 ________ 2594 ________ 2595
65975
6597
6582
6599
6582
6591
69
65942
65983
65923
65924
6590
6604
65921
65821
65931____25991
65
6607
65
6604
6610
6607
65
6612
65
65921
677____26003
66004
65
65923
66007
65921
66009
65
66011
665
65921
643
65923
66016
65
66018
66019
JavaScript
66020
6582
66022
6582
65919
66025
6590
66
6590
68
66030
6593____26032
6593
6586
6593
68
6589
608
6591
6592
66041____2594
6595
6593____2597
6593____26047
6593
6591
6602
________ 008 ________ 2604 ________ 2605
6590
6607
6590
6604
6610
6582
6607
6582
6612
6582
66064
6582
66066
6582____26068
66069
66070
65____26072
Đầu ra
6
Độ phức tạp về thời gian. O[n*n], Kiểm tra từng phần tử n lần
Không gian phụ. Ô[1]
Tìm phần tử không lặp lại đầu tiên trong một Mảng số nguyên nhất định bằng Hashing
Cách tiếp cận này dựa trên ý tưởng sau
- Ý tưởng là lưu trữ tần suất của mọi phần tử trong hashmap
- Sau đó kiểm tra phần tử đầu tiên có tần số là 1 trong hashmap
- Điều này có thể đạt được bằng cách sử dụng băm
Hình minh họa
mảng[] = {-1, 2, -1, 3, 0}
Bản đồ tần số cho arr
- -1 -> 2
- 2 -> 1
- 3 -> 1
- 0 -> 1
Di chuyển mảng[] từ trái sang
Tại i = 0
- Tần suất của mảng[0] là 2 nên không thể là phần tử không lặp đầu tiên
Tại i = 1
- Tần suất của arr[1] là 1 nên nó sẽ là phần tử không lặp lại đầu tiên
Do đó, 2 là phần tử không lặp lại đầu tiên
Thực hiện theo các bước dưới đây để giải quyết vấn đề đã cho.
- Di chuyển mảng và chèn các phần tử và số lượng của chúng trong bảng băm
- Duyệt lại mảng và in phần tử đầu tiên có số đếm bằng 1
Dưới đây là triển khai ý tưởng trên
C++
66073
659
660
661
662
663
664
665
664
61
664
63
64
65
66087
65____26089
65
66091____264____043
664
66095
65
68
69____264
66100
6582
66102
65
66104
65
66106
65
68
69____264
66100
6582
6591
66114
________ 2590 ________ 2604 ________ 2605
65
6604
6610
6607
6612
664
6614
64
65
664
6618
65
664
6621____2622
6623
6622
6625
65
6627
65
6604
6630
6607
Java
66142
659
66144
66145
6634
6635
65
6637
664
665
664
61
664
63
65
64
6582
66087
6582____26089
6582
66163
66164
66165
6582
68
69____264
6652
6653
6654
6590
6591
66175
6593
66177____026
66016
6590
6607
6590
66183
64
6593
66186
626
66016
6590
6607
6582
6607
6582
66104
6582
66106
6582
68
69
664
6652
6653
66203
6590
6591
66206
626
65924
________ 2593 ________ 2604 ________ 2605
6582
6604
625
626
6595
65
6607
65
6612
65
633
6637
635
636
65
64
6582
664
641
642
643
644
643
642
643
648
643
650
643
644
653
6582
664
656
6582
66247
65
6607
6607
66251
Python3
66252
664
________ 26254 ________ 26255 ________ 26144 ________ 26257
665
666
65
66261
677
66263
66264
66265
6653
65924
65____26269
65
68
671____072
673
674
6582
66277
698
677
626
65____26282
65____26284
65
68
671____072
673
674
6582
6591
66277
677
677
626____26265
6590
6604
690
________ 05 ________ 2604 ________ 025 ________ 026
66305
65819
677
65821
642
643
644
643
642
643
648
643
650
643
644
65833
65834
677
65836
65837
65838
65839
66327
C#
66328
659
661
65844
661
66333
6634
6635
65
6637
664
665
664
65852
664
63
65
64
6582
66087
6582____26089
6582
66351____264
643
664
66355
66164
66351
664
643
664
66361