Hướng dẫn python list comprehension if else two lists - hiểu danh sách python nếu khác hai danh sách

Tôi có mã này:

a = []
b = []
for row in range[10]:
    if x[row] is True:
        a += list_features[row]
    else:
        b += list_features[row]

Trong đó list_features[row] là danh sách 1D. Tôi muốn làm điều này trong danh sách hiểu được tôi biết một cái gì đó như mã dưới đây sẽ hoạt động:

a+= [list_features[row] for row in [10] if x[row] is True]
b+= [list_features[row] for row in [10] if x[row] is False]

Làm thế nào một người sẽ làm điều này chỉ với một sự hiểu biết trong một dòng?

Mariand

12K12 Huy hiệu vàng37 Huy hiệu bạc53 Huy hiệu đồng12 gold badges37 silver badges53 bronze badges

Hỏi ngày 17 tháng 8 năm 2018 lúc 10:00Aug 17, 2018 at 10:00

3

Vì bạn có 2 mục tiêu, nên việc hiểu danh sách không được điều chỉnh [và sử dụng 2 bộ hiểu có nghĩa là kiểm tra ____99 hai lần, một lần để xây dựng

a+= [list_features[row] for row in [10] if x[row] is True]
b+= [list_features[row] for row in [10] if x[row] is False]
0 và một lần để xây dựng
a+= [list_features[row] for row in [10] if x[row] is True]
b+= [list_features[row] for row in [10] if x[row] is False]
1]

Một cái gì đó ngắn gọn hơn một chút sẽ là một biểu thức ternary để chọn mục tiêu [bạn không thể sử dụng

a+= [list_features[row] for row in [10] if x[row] is True]
b+= [list_features[row] for row in [10] if x[row] is False]
2 trực tiếp trên biểu thức nhưng bạn có thể sử dụng
a+= [list_features[row] for row in [10] if x[row] is True]
b+= [list_features[row] for row in [10] if x[row] is False]
3 điều tương tự]:

[a if x[row] else b].extend[list_features[row]]

Điều đó nói rằng, tôi sẽ không sử dụng

a+= [list_features[row] for row in [10] if x[row] is True]
b+= [list_features[row] for row in [10] if x[row] is False]
4 để lập chỉ mục cả hai danh sách [cồng kềnh, không đồng bào và kém hiệu quả khi truy cập tuần tự], nhưng
a+= [list_features[row] for row in [10] if x[row] is True]
b+= [list_features[row] for row in [10] if x[row] is False]
5:

for i,lf in zip[x,list_features]:
   [a if i else b].extend[lf]

"Rủi ro" duy nhất là một trong các danh sách ngắn hơn so với khác, trong trường hợp đó, bạn không gặp bất kỳ lỗi nào và kết quả không chính xác [một fillvalue thích hợp được cung cấp cho

a+= [list_features[row] for row in [10] if x[row] is True]
b+= [list_features[row] for row in [10] if x[row] is False]
6 có thể là một sự thay thế trong trường hợp đó]

Đã trả lời ngày 17 tháng 8 năm 2018 lúc 10:06Aug 17, 2018 at 10:06

Vì câu hỏi là làm điều đó trong một dòng:

a+= [list_features[row] for row in [10] if x[row] is True]
b+= [list_features[row] for row in [10] if x[row] is False]
7

Điều này không cho rằng

a+= [list_features[row] for row in [10] if x[row] is True]
b+= [list_features[row] for row in [10] if x[row] is False]
8 hoặc
a+= [list_features[row] for row in [10] if x[row] is True]
b+= [list_features[row] for row in [10] if x[row] is False]
9 là các chuỗi, chúng có thể là các dicts.

Nhưng thực sự không có điểm nào trong việc đặt mọi thứ vào một dòng. Viết mã rõ ràng là quan trọng hơn.

Đã trả lời ngày 17 tháng 8 năm 2018 lúc 10:17Aug 17, 2018 at 10:17

iamanigeeitiamanigeeitiamanigeeit

7241 Huy hiệu vàng5 Huy hiệu bạc11 Huy hiệu đồng1 gold badge5 silver badges11 bronze badges

1

Sự hiểu biết danh sách của bạn gần như tốt, vì vậy bạn không cần 2 dòng đầu tiên, nhưng chỉ liệt kê các toàn bộ, vì vậy thay vì:

a = []
b = []
for row in range[10]:
    if x[row] is True:
        a += list_features[row]
    else:
        b += list_features[row]

sử dụng

a = [list_features[row] for row in range[10] if x[row] is True]
b = [list_features[row] for row in range[10] if x[row] is False]

Lưu ý hàm

[a if x[row] else b].extend[list_features[row]]
0.

Đã trả lời ngày 17 tháng 8 năm 2018 lúc 10:06Aug 17, 2018 at 10:06

Vì câu hỏi là làm điều đó trong một dòng:MarianD

12K12 Huy hiệu vàng37 Huy hiệu bạc53 Huy hiệu đồng12 gold badges37 silver badges53 bronze badges

Hỏi ngày 17 tháng 8 năm 2018 lúc 10:00

Vì bạn có 2 mục tiêu, nên việc hiểu danh sách không được điều chỉnh [và sử dụng 2 bộ hiểu có nghĩa là kiểm tra ____99 hai lần, một lần để xây dựng
a+= [list_features[row] for row in [10] if x[row] is True]
b+= [list_features[row] for row in [10] if x[row] is False]
0 và một lần để xây dựng
a+= [list_features[row] for row in [10] if x[row] is True]
b+= [list_features[row] for row in [10] if x[row] is False]
1]

Một cái gì đó ngắn gọn hơn một chút sẽ là một biểu thức ternary để chọn mục tiêu [bạn không thể sử dụng

a+= [list_features[row] for row in [10] if x[row] is True]
b+= [list_features[row] for row in [10] if x[row] is False]
2 trực tiếp trên biểu thức nhưng bạn có thể sử dụng
a+= [list_features[row] for row in [10] if x[row] is True]
b+= [list_features[row] for row in [10] if x[row] is False]
3 điều tương tự]:Aug 17, 2018 at 10:07

Điều đó nói rằng, tôi sẽ không sử dụng

a+= [list_features[row] for row in [10] if x[row] is True]
b+= [list_features[row] for row in [10] if x[row] is False]
4 để lập chỉ mục cả hai danh sách [cồng kềnh, không đồng bào và kém hiệu quả khi truy cập tuần tự], nhưng
a+= [list_features[row] for row in [10] if x[row] is True]
b+= [list_features[row] for row in [10] if x[row] is False]
5:leotrubach

"Rủi ro" duy nhất là một trong các danh sách ngắn hơn so với khác, trong trường hợp đó, bạn không gặp bất kỳ lỗi nào và kết quả không chính xác [một fillvalue thích hợp được cung cấp cho

a+= [list_features[row] for row in [10] if x[row] is True]
b+= [list_features[row] for row in [10] if x[row] is False]
6 có thể là một sự thay thế trong trường hợp đó]11 silver badges14 bronze badges

Đã trả lời ngày 17 tháng 8 năm 2018 lúc 10:06

Vì câu hỏi là làm điều đó trong một dòng:

Điều này không cho rằng

a+= [list_features[row] for row in [10] if x[row] is True]
b+= [list_features[row] for row in [10] if x[row] is False]
8 hoặc
a+= [list_features[row] for row in [10] if x[row] is True]
b+= [list_features[row] for row in [10] if x[row] is False]
9 là các chuỗi, chúng có thể là các dicts.

[a if x[row] else b].extend[list_features[row]]
5

Nhưng thực sự không có điểm nào trong việc đặt mọi thứ vào một dòng. Viết mã rõ ràng là quan trọng hơn.Aug 17, 2018 at 10:08

Đã trả lời ngày 17 tháng 8 năm 2018 lúc 10:17Araelath

iamanigeeitiamanigeeit2 silver badges13 bronze badges

7241 Huy hiệu vàng5 Huy hiệu bạc11 Huy hiệu đồng

_ = [a += list_features[row] if x[row] is True else b += list_features[row] for row in range[10]]

Sự hiểu biết danh sách của bạn gần như tốt, vì vậy bạn không cần 2 dòng đầu tiên, nhưng chỉ liệt kê các toàn bộ, vì vậy thay vì:Aug 17, 2018 at 10:22

sử dụngDaniele

Lưu ý hàm

[a if x[row] else b].extend[list_features[row]]
0.7 silver badges18 bronze badges

Danh sách hiểu có thể trả về hai danh sách?

Câu hỏi là: 'Có thể trả về hai danh sách từ một danh sách hiểu không? '. Tôi trả lời rằng điều đó là có thể, nhưng theo tôi là tốt hơn để lặp lại với một vòng lặp và thu thập kết quả trong hai danh sách riêng biệt.it is possible, but in my opinion is better to iterate with a loop and collect the results in two separate lists.

Làm thế nào để bạn thực hiện một danh sách hai danh sách trong Python?

Ví dụ 1: Danh sách hiểu bằng hai danh sách..
Chương trình Python list_1 = [2, 6, 7, 3] list_2 = [1, 4, 2] list_3 = [x * y cho x trong list_1 cho y trong list_2] in [list_3].
Đầu ra [2, 8, 4, 6, 24, 12, 7, 28, 14, 3, 12, 6].

Bạn có thể làm danh sách lồng nhau không?

Hóa ra, bạn có thể làm tổ danh sách các toàn bộ trong danh sách khác để giảm thêm mã của bạn và giúp bạn dễ đọc hơn.Như một vấn đề thực tế, không có giới hạn về số lượng toàn bộ bạn có thể làm tổ trong nhau, điều này có thể viết mã rất phức tạp trong một dòng.you can nest list comprehensions within another list comprehension to further reduce your code and make it easier to read still. As a matter of fact, there's no limit to the number of comprehensions you can nest within each other, which makes it possible to write very complex code in a single line.

Elif có thể được sử dụng trong danh sách hiểu không?

Chúng ta có thể sử dụng "Elif" trong một danh sách hiểu không?Không, chúng tôi không thể sử dụng nó, nhưng có một cách để giải quyết thách thức này.Tại đây, bạn có thể thấy giải pháp cổ điển của sự cố "FizzBuzz" bằng cách sử dụng kết hợp "if-elif-else".Để giải quyết thách thức này, chúng tôi có thể xây dựng danh sách hiểu biết như dưới đây.No we can't use it, but there is a way to solve this challenge. Here you can see the classic solution of "FizzBuzz" problem using "If-Elif-Else" combination. To solve this challenge we can construct our List Comprehension as below.

Bài Viết Liên Quan

Chủ Đề