Hướng dẫn does python sorted remove duplicates? - python đã sắp xếp loại bỏ các bản sao không?

81

Mới! Lưu câu hỏi hoặc câu trả lời và sắp xếp nội dung yêu thích của bạn. Tìm hiểu thêm.
Learn more.

Đưa ra một danh sách các chuỗi, tôi muốn sắp xếp nó theo thứ tự bảng chữ cái và loại bỏ các bản sao. Tôi biết tôi có thể làm điều này:

from sets import Set
[...]
myHash = Set(myList)

Nhưng tôi không biết làm thế nào để truy xuất các thành viên danh sách từ băm theo thứ tự bảng chữ cái.

Tôi chưa kết hôn với băm, vì vậy bất kỳ cách nào để thực hiện điều này sẽ hoạt động. Ngoài ra, hiệu suất không phải là một vấn đề, vì vậy tôi thích một giải pháp được thể hiện trong mã rõ ràng là một giải pháp nhanh nhưng mờ hơn.

Hướng dẫn does python sorted remove duplicates? - python đã sắp xếp loại bỏ các bản sao không?

hỏi ngày 26 tháng 1 năm 2009 lúc 14:09Jan 26, 2009 at 14:09

Hướng dẫn does python sorted remove duplicates? - python đã sắp xếp loại bỏ các bản sao không?

Josh Gloverjosh GloverJosh Glover

24.1K26 Huy hiệu vàng86 Huy hiệu bạc128 Huy hiệu đồng26 gold badges86 silver badges128 bronze badges

3

Một danh sách có thể được sắp xếp và sao chép bằng các chức năng tích hợp:

myList = sorted(set(myList))
  • myList = sorted(set(myList))
    
    0 là chức năng tích hợp cho Python> = 2.3
  • myList = sorted(set(myList))
    
    1 là chức năng tích hợp cho Python> = 2.4

Bengt

13.6K6 Huy hiệu vàng47 Huy hiệu bạc65 Huy hiệu Đồng6 gold badges47 silver badges65 bronze badges

Đã trả lời ngày 26 tháng 1 năm 2009 lúc 14:16Jan 26, 2009 at 14:16

8

Nếu đầu vào của bạn đã được sắp xếp, thì có thể có một cách đơn giản hơn để làm điều đó:

from operator import itemgetter
from itertools import groupby
unique_list = list(map(itemgetter(0), groupby(yourList)))

Đã trả lời ngày 26 tháng 1 năm 2009 lúc 14:48Jan 26, 2009 at 14:48

3

Nếu bạn muốn giữ thứ tự của danh sách ban đầu, chỉ cần sử dụng OrderedDict với

myList = sorted(set(myList))
2 làm giá trị.

Trong Python2:

    from collections import OrderedDict
    from itertools import izip, repeat

    unique_list = list(OrderedDict(izip(my_list, repeat(None))))

Trong Python3, nó thậm chí còn đơn giản hơn:

    from collections import OrderedDict
    from itertools import repeat

    unique_list = list(OrderedDict(zip(my_list, repeat(None))))

Nếu bạn không thích Iterators (Zip và Lặp lại), bạn có thể sử dụng Trình tạo (hoạt động cả trong 2 & 3):

    from collections import OrderedDict
    unique_list = list(OrderedDict((element, None) for element in my_list))

Đã trả lời ngày 10 tháng 5 năm 2016 lúc 9:49May 10, 2016 at 9:49

Nếu đó là sự rõ ràng của bạn theo sau, thay vì tốc độ, tôi nghĩ điều này rất rõ ràng:

def sortAndUniq(input):
  output = []
  for x in input:
    if x not in output:
      output.append(x)
  output.sort()
  return output

Mặc dù vậy, đó là O (n^2), với việc sử dụng lặp đi lặp lại không cho mỗi yếu tố của danh sách đầu vào.

Đã trả lời ngày 26 tháng 1 năm 2009 lúc 14:16Jan 26, 2009 at 14:16

Nếu đầu vào của bạn đã được sắp xếp, thì có thể có một cách đơn giản hơn để làm điều đó:unwind

Đã trả lời ngày 26 tháng 1 năm 2009 lúc 14:4864 gold badges463 silver badges595 bronze badges

0

Nếu bạn muốn giữ thứ tự của danh sách ban đầu, chỉ cần sử dụng OrderedDict với

myList = sorted(set(myList))
2 làm giá trị.

Trong Python2:

for key in sorted(my_dict.keys()):
   print key, my_dict[key]
   ...

Trong Python3, nó thậm chí còn đơn giản hơn:

for key, val in sorted(my_dict.items()):
    print key, val
    ...

Nếu bạn không thích Iterators (Zip và Lặp lại), bạn có thể sử dụng Trình tạo (hoạt động cả trong 2 & 3):Jan 26, 2009 at 15:22

Đã trả lời ngày 10 tháng 5 năm 2016 lúc 9:49davidavr

Nếu đó là sự rõ ràng của bạn theo sau, thay vì tốc độ, tôi nghĩ điều này rất rõ ràng:4 gold badges27 silver badges31 bronze badges

Mặc dù vậy, đó là O (n^2), với việc sử dụng lặp đi lặp lại không cho mỗi yếu tố của danh sách đầu vào.

 output = []

     def uniq(input):
         if input not in output:
            output.append(input)
 print output     

Khả năng thư giãnJun 26, 2013 at 9:36

Làm cách nào để loại bỏ các bản sao khỏi một danh sách được sắp xếp trong Python?

Khoa học dữ liệu thực tế sử dụng Python..
Nếu danh sách trống, hãy trả lại 0 ..
Nếu không, ban đầu lấy trước = phần tử đầu tiên của A. và xác định độ dài = 0 ..
Đối với I: = 1 đến N-1, làm.Nếu một [i] không giống như trước, thì.Độ dài: = Độ dài + 1. Prev: = A [i].
Trở lại chiều dài ..

Làm thế nào để bạn loại bỏ các bản sao trong Python?

Phương thức drop_duplicates () loại bỏ các hàng trùng lặp.Sử dụng tham số tập hợp con nếu chỉ nên xem xét một số cột được chỉ định khi tìm kiếm các bản sao.drop_duplicates() method removes duplicate rows. Use the subset parameter if only some specified columns should be considered when looking for duplicates.

Một mảng được sắp xếp có thể sao chép?

Trong mảng được sắp xếp, tất cả các phần tử trùng lặp sẽ được đặt liền kề với nhau.all duplicate elements will be placed adjacent to each other.

Làm cách nào để loại bỏ các bản sao theo giai đoạn sắp xếp?

Bạn có thể sử dụng Sắp xếp giai đoạn để sắp xếp dữ liệu bằng cách sử dụng phím Sắp xếp cho cột bạn muốn xóa trùng lặp, trong giai đoạn sắp xếp giữ thuộc tính Key_change là đúng, nó sẽ tạo một cột có hai giá trị 1 và 0.1 là duy nhất và 0 để trùng lặp sau đóLấy giai đoạn biến áp và nhấp vào thuộc tính ràng buộc trong đó đã chọn ...