Hướng dẫn list comprehension python unique values - danh sách hiểu các giá trị duy nhất của python

Tôi đang cố gắng viết một câu lệnh Hiểu danh sách sẽ chỉ thêm một mục nếu nó hiện không có trong danh sách. Có cách nào để kiểm tra các mục hiện tại trong danh sách hiện đang được xây dựng không? Đây là một ví dụ ngắn gọn:

Đầu vào

{
    "Stefan" : ["running", "engineering", "dancing"],
    "Bob" : ["dancing", "art", "theatre"],
    "Julia" : ["running", "music", "art"]
}

Đầu ra

["running", "engineering", "dancing", "art", "theatre", "music"]

Mã mà không sử dụng danh sách hiểu biết

output = []
for name, hobbies in input.items():
    for hobby in hobbies:
        if hobby not in output:
            output.append(hobby)

Nỗ lực của tôi

[hobby for name, hobbies in input.items() for hobby in hobbies if hobby not in ???]

Hướng dẫn list comprehension python unique values - danh sách hiểu các giá trị duy nhất của python

Bhargav Rao

47.4K27 Huy hiệu vàng122 Huy hiệu bạc137 Huy hiệu đồng27 gold badges122 silver badges137 bronze badges

Khi được hỏi ngày 19 tháng 5 năm 2015 lúc 17:07May 19, 2015 at 17:07

Bossbalystefan BossbalystefanStefan Bossbaly

6.5329 Huy hiệu vàng51 Huy hiệu bạc81 Huy hiệu đồng9 gold badges51 silver badges81 bronze badges

3

Bạn có thể sử dụng

["running", "engineering", "dancing", "art", "theatre", "music"]
9 và đặt hiểu:

{hobby for name, hobbies in input.items() for hobby in hobbies}

Như M.Wasowski đã đề cập, chúng tôi không sử dụng

output = []
for name, hobbies in input.items():
    for hobby in hobbies:
        if hobby not in output:
            output.append(hobby)
0 ở đây, vì vậy chúng tôi có thể sử dụng
output = []
for name, hobbies in input.items():
    for hobby in hobbies:
        if hobby not in output:
            output.append(hobby)
1 thay vào đó: thay vào đó:

{hobby for hobbies in input.values() for hobby in hobbies}

Nếu bạn thực sự cần một danh sách làm kết quả, bạn có thể làm điều này (nhưng lưu ý rằng thông thường bạn có thể làm việc với các bộ mà không có bất kỳ vấn đề nào):

list({hobby for hobbies in input.values() for hobby in hobbies})

Đã trả lời ngày 19 tháng 5 năm 2015 lúc 17:12May 19, 2015 at 17:12

Hướng dẫn list comprehension python unique values - danh sách hiểu các giá trị duy nhất của python

8

Như câu trả lời này cho thấy: bạn có thể sử dụng bộ lọc độc đáo:

def f7(seq):
    seen = set()
    seen_add = seen.add
    return [x for x in seq if not (x in seen or seen_add(x))]

Và gọi với:

>>> f7(hobby for name, hobbies in input.items() for hobby in hobbies)
['running', 'engineering', 'dancing', 'art', 'theatre', 'music']

Tôi sẽ thực hiện riêng bộ lọc độc đáo vì một quy tắc thiết kế nói rằng "những thứ khác nhau nên được xử lý bởi các lớp/phương thức/thành phần khác nhau/bất cứ điều gì". Hơn nữa, bạn chỉ có thể sử dụng lại phương pháp này nếu cần thiết.

Một lợi thế khác là - như được viết tại câu trả lời được liên kết - rằng thứ tự của các mục được bảo tồn. Đối với một số ứng dụng, điều này có thể là cần thiết.

Đã trả lời ngày 19 tháng 5 năm 2015 lúc 17:14May 19, 2015 at 17:14

Hướng dẫn list comprehension python unique values - danh sách hiểu các giá trị duy nhất của python

Willem Van Onsemwillem Van OnsemWillem Van Onsem

411K29 Huy hiệu vàng389 Huy hiệu bạc511 Huy hiệu đồng29 gold badges389 silver badges511 bronze badges

10

Nếu bạn thực sự thực sự muốn một danh sách và chỉ một danh sách comp, bạn có thể làm

>>> s = []
>>> [s.append(j)  for i in d.values() for j in i if j not in s]
[None, None, None, None, None, None]
>>> s
['dancing', 'art', 'theatre', 'running', 'engineering', 'music']

Ở đây,

output = []
for name, hobbies in input.items():
    for hobby in hobbies:
        if hobby not in output:
            output.append(hobby)
2 là kết quả của một tác dụng phụ và
output = []
for name, hobbies in input.items():
    for hobby in hobbies:
        if hobby not in output:
            output.append(hobby)
3 là từ điển ban đầu của bạn. Ưu điểm duy nhất ở đây là bạn có thể bảo tồn thứ tự không giống như hầu hết các câu trả lời khác ở đây.

Lưu ý: Đây là một cách xấu vì nó khai thác danh sách comp và kết quả là một tác dụng phụ. Đừng làm điều đó như một thực hành, câu trả lời này chỉ là để cho bạn thấy rằng bạn có thể đạt được nó bằng một mình danh sách comp: This a bad way as it exploits the list-comp and the result is a side effect. Don't do it as a practice, This answer is just to show you that you can achieve it using a list comp alone

Đã trả lời ngày 19 tháng 5 năm 2015 lúc 17:21May 19, 2015 at 17:21

Hướng dẫn list comprehension python unique values - danh sách hiểu các giá trị duy nhất của python

Bhargav Raobhargav RaoBhargav Rao

47.4K27 Huy hiệu vàng122 Huy hiệu bạc137 Huy hiệu đồng27 gold badges122 silver badges137 bronze badges

10

Khi được hỏi ngày 19 tháng 5 năm 2015 lúc 17:07

["running", "engineering", "dancing", "art", "theatre", "music"]
0

Bossbalystefan BossbalystefanMay 19, 2015 at 17:17

m.wasowskim.wasowskim.wasowski

6.5329 Huy hiệu vàng51 Huy hiệu bạc81 Huy hiệu đồng1 gold badge21 silver badges30 bronze badges

2

Bạn có thể sử dụng

["running", "engineering", "dancing", "art", "theatre", "music"]
9 và đặt hiểu:

["running", "engineering", "dancing", "art", "theatre", "music"]
1

Như M.Wasowski đã đề cập, chúng tôi không sử dụng

output = []
for name, hobbies in input.items():
    for hobby in hobbies:
        if hobby not in output:
            output.append(hobby)
0 ở đây, vì vậy chúng tôi có thể sử dụng
output = []
for name, hobbies in input.items():
    for hobby in hobbies:
        if hobby not in output:
            output.append(hobby)
1 thay vào đó: thay vào đó:

["running", "engineering", "dancing", "art", "theatre", "music"]
2

Nếu bạn thực sự cần một danh sách làm kết quả, bạn có thể làm điều này (nhưng lưu ý rằng thông thường bạn có thể làm việc với các bộ mà không có bất kỳ vấn đề nào):May 19, 2015 at 20:24

Đã trả lời ngày 19 tháng 5 năm 2015 lúc 17:12Thijs van Dien

Như câu trả lời này cho thấy: bạn có thể sử dụng bộ lọc độc đáo:1 gold badge27 silver badges48 bronze badges

1

Và gọi với:

["running", "engineering", "dancing", "art", "theatre", "music"]
3

Tôi sẽ thực hiện riêng bộ lọc độc đáo vì một quy tắc thiết kế nói rằng "những thứ khác nhau nên được xử lý bởi các lớp/phương thức/thành phần khác nhau/bất cứ điều gì". Hơn nữa, bạn chỉ có thể sử dụng lại phương pháp này nếu cần thiết.

["running", "engineering", "dancing", "art", "theatre", "music"]
4

Một lợi thế khác là - như được viết tại câu trả lời được liên kết - rằng thứ tự của các mục được bảo tồn. Đối với một số ứng dụng, điều này có thể là cần thiết.

["running", "engineering", "dancing", "art", "theatre", "music"]
5

Đã trả lời ngày 19 tháng 5 năm 2015 lúc 17:14May 19, 2015 at 17:59

Hướng dẫn list comprehension python unique values - danh sách hiểu các giá trị duy nhất của python

Willem Van Onsemwillem Van OnsemShashank

411K29 Huy hiệu vàng389 Huy hiệu bạc511 Huy hiệu đồng5 gold badges35 silver badges61 bronze badges

0

Nếu bạn thực sự thực sự muốn một danh sách và chỉ một danh sách comp, bạn có thể làm

["running", "engineering", "dancing", "art", "theatre", "music"]
6

Đã trả lời ngày 19 tháng 5 năm 2015 lúc 17:12May 19, 2015 at 17:12

Hướng dẫn list comprehension python unique values - danh sách hiểu các giá trị duy nhất của python

Như câu trả lời này cho thấy: bạn có thể sử dụng bộ lọc độc đáo:nullptr

Và gọi với:3 silver badges12 bronze badges

Tôi sẽ thực hiện riêng bộ lọc độc đáo vì một quy tắc thiết kế nói rằng "những thứ khác nhau nên được xử lý bởi các lớp/phương thức/thành phần khác nhau/bất cứ điều gì". Hơn nữa, bạn chỉ có thể sử dụng lại phương pháp này nếu cần thiết.

["running", "engineering", "dancing", "art", "theatre", "music"]
7

Một lợi thế khác là - như được viết tại câu trả lời được liên kết - rằng thứ tự của các mục được bảo tồn. Đối với một số ứng dụng, điều này có thể là cần thiết.

["running", "engineering", "dancing", "art", "theatre", "music"]
8

Đã trả lời ngày 19 tháng 5 năm 2015 lúc 17:14

Đã trả lời ngày 19 tháng 5 năm 2015 lúc 17:12May 19, 2015 at 17:12

Plug4Plug4Plug4

Như câu trả lời này cho thấy: bạn có thể sử dụng bộ lọc độc đáo:9 gold badges48 silver badges75 bronze badges

Làm thế nào để bạn nhận được các mục độc đáo từ một danh sách trong Python?

Sử dụng Numpy nhập khẩu của Python, các yếu tố duy nhất trong mảng cũng thu được. Trong bước đầu tiên, hãy chuyển đổi danh sách thành xconvert the list to x=numpy. array(list) and then use numpy. unique(x) function to get the unique values from the list.

Một giá trị duy nhất trong Python là gì?

Hàm duy nhất () được sử dụng để tìm các phần tử duy nhất của một mảng. Trả về các yếu tố duy nhất được sắp xếp của một mảng. Có ba đầu ra tùy chọn ngoài các phần tử duy nhất: các chỉ số của mảng đầu vào cung cấp các giá trị duy nhất. Các chỉ số của mảng duy nhất tái cấu trúc mảng đầu vào.used to find the unique elements of an array. Returns the sorted unique elements of an array. There are three optional outputs in addition to the unique elements: the indices of the input array that give the unique values. the indices of the unique array that reconstruct the input array.

Đặt sự hiểu biết trong Python là gì?

Đặt hiểu là một phương pháp để tạo các bộ trong Python bằng cách sử dụng các phần tử từ các vòng lặp khác như danh sách, bộ hoặc bộ dữ liệu.Giống như chúng tôi sử dụng danh sách hiểu để tạo danh sách, chúng tôi có thể sử dụng sự hiểu biết thay vì vòng lặp để tạo một bộ mới và thêm các phần tử vào nó.a method for creating sets in python using the elements from other iterables like lists, sets, or tuples. Just like we use list comprehension to create lists, we can use set comprehension instead of for loop to create a new set and add elements to it.

Làm thế nào để bạn thêm một mục vào một danh sách trong Python?

Làm thế nào để thêm các yếu tố vào một danh sách trong Python..
append (): nối phần tử vào cuối danh sách ..
Chèn (): Chèn phần tử trước chỉ mục đã cho ..
Mở rộng (): Mở rộng danh sách bằng cách nối thêm các yếu tố từ có thể sử dụng được ..
Danh sách Concatenation: Chúng ta có thể sử dụng toán tử + để kết hợp nhiều danh sách và tạo một danh sách mới ..