Hướng dẫn python for loop in one line with if-else - python for vòng lặp trong một dòng với if-else

Tôi có một danh sách hiểu biết tạo ra danh sách các số lẻ của một phạm vi nhất định:

[x for x in range(1, 10) if x % 2]

Điều đó làm cho một bộ lọc loại bỏ các số chẵn. Thay vào đó, tôi muốn sử dụng logic có điều kiện, để các số được đối xử khác nhau, nhưng vẫn đóng góp vào danh sách. Tôi đã thử mã này, nhưng nó thất bại:

>>> [x for x in range(1, 10) if x % 2 else x * 100]
  File "", line 1
    [x for x in range(1, 10) if x % 2 else x * 100]
                                         ^
SyntaxError: invalid syntax

Tôi biết rằng các biểu thức Python cho phép một cú pháp như thế:

1 if 0 is 0 else 3

Làm thế nào tôi có thể sử dụng nó bên trong danh sách hiểu?

Hướng dẫn python for loop in one line with if-else - python for vòng lặp trong một dòng với if-else

Karl Knechtel

59.4K10 Huy hiệu vàng86 Huy hiệu bạc132 Huy hiệu đồng10 gold badges86 silver badges132 bronze badges

Đã hỏi ngày 26 tháng 6 năm 2013 lúc 13:17Jun 26, 2013 at 13:17

1

>>> [x for x in range(1, 10) if x % 2 else x * 100]
  File "", line 1
    [x for x in range(1, 10) if x % 2 else x * 100]
                                         ^
SyntaxError: invalid syntax
2 là cú pháp cho biểu thức bạn đang trả về cho từng phần tử. Do đó bạn cần:

[ x if x%2 else x*100 for x in range(1, 10) ]

Sự nhầm lẫn phát sinh từ thực tế bạn đang sử dụng bộ lọc trong ví dụ đầu tiên, nhưng không phải trong lần thứ hai. Trong ví dụ thứ hai, bạn chỉ ánh xạ từng giá trị sang một giá trị khác, sử dụng biểu thức vận hành ternary.

Với bộ lọc, bạn cần:

[ EXP for x in seq if COND ]

Không có bộ lọc bạn cần:

[ EXP for x in seq ]

Và trong ví dụ thứ hai của bạn, biểu thức là một biểu thức "phức tạp", xảy ra liên quan đến

>>> [x for x in range(1, 10) if x % 2 else x * 100]
  File "", line 1
    [x for x in range(1, 10) if x % 2 else x * 100]
                                         ^
SyntaxError: invalid syntax
3.

Tim Pietzcker

Phù bằng vàng 319K5757 gold badges494 silver badges550 bronze badges

Đã trả lời ngày 26 tháng 6 năm 2013 lúc 13:18Jun 26, 2013 at 13:18

Hướng dẫn python for loop in one line with if-else - python for vòng lặp trong một dòng với if-else

shx2shx2shx2

59.4K11 Huy hiệu vàng122 Huy hiệu bạc148 Huy hiệu đồng11 gold badges122 silver badges148 bronze badges

4

[x if x % 2 else x * 100 for x in range(1, 10) ]

Đã trả lời ngày 26 tháng 6 năm 2013 lúc 13:19Jun 26, 2013 at 13:19

Lucasglucasglucasg

10,5K4 Huy hiệu vàng34 Huy hiệu bạc55 Huy hiệu Đồng4 gold badges34 silver badges55 bronze badges

0

Bạn cũng có thể làm điều đó với danh sách hiểu biết:

A=[[x*100, x][x % 2 != 0] for x in range(1,11)]
print A

Không được thừa nhận

50,2K7 Huy hiệu vàng49 Huy hiệu bạc67 Huy hiệu đồng7 gold badges49 silver badges67 bronze badges

Đã trả lời ngày 29 tháng 6 năm 2014 lúc 7:40Jun 29, 2014 at 7:40

Hướng dẫn python for loop in one line with if-else - python for vòng lặp trong một dòng với if-else

2

Chỉ là một giải pháp khác, hy vọng một số người có thể thích nó:

Sử dụng: [Sai, true] [Biểu thức]

>>> map(lambda x: [x*100, x][x % 2 != 0], range(1,10))
[1, 200, 3, 400, 5, 600, 7, 800, 9]
>>>

Đã trả lời ngày 18 tháng 1 năm 2014 lúc 12:54Jan 18, 2014 at 12:54

Hướng dẫn python for loop in one line with if-else - python for vòng lặp trong một dòng với if-else

James Sapamjames SapamJames Sapam

15.3k11 Huy hiệu vàng47 Huy hiệu bạc68 Huy hiệu Đồng11 gold badges47 silver badges68 bronze badges

0

#Làm thế nào bạn có thể tạo ra một danh sách một mảng các giá trị tiêu cực và tích cực

my_list=[-2,-3,0,1,5]
squred_values=[]
  

squred_values=[-i**2 if i<0 else i**2 for i in my_list]

#or

>>> [x for x in range(1, 10) if x % 2 else x * 100]
  File "", line 1
    [x for x in range(1, 10) if x % 2 else x * 100]
                                         ^
SyntaxError: invalid syntax
0

Hướng dẫn python for loop in one line with if-else - python for vòng lặp trong một dòng với if-else

PM 77-1

12.6K20 Huy hiệu vàng65 Huy hiệu bạc109 Huy hiệu Đồng20 gold badges65 silver badges109 bronze badges

Đã trả lời ngày 9 tháng 9 năm 2021 lúc 20:39Sep 9, 2021 at 20:39

MidomidoMido

Phù hiệu bằng đồng 2144 bronze badges

Hai cho trong một danh sách hiểu biết

>>> [x for x in range(1, 10) if x % 2 else x * 100]
  File "", line 1
    [x for x in range(1, 10) if x % 2 else x * 100]
                                         ^
SyntaxError: invalid syntax
1

Tomerikoo

16.7K15 Huy hiệu vàng38 Huy hiệu bạc56 Huy hiệu đồng15 gold badges38 silver badges56 bronze badges

Đã trả lời ngày 2 tháng 12 năm 2021 lúc 15:56Dec 2, 2021 at 15:56

1

Làm thế nào để bạn viết cho vòng lặp và nếu điều kiện trong một dòng python?

Làm thế nào để viết một vòng lặp cho một dòng mã Python duy nhất ?..
Phương pháp 1: Nếu cơ thể vòng lặp bao gồm một câu lệnh, chỉ cần viết câu lệnh này vào cùng một dòng: Đối với I trong phạm vi (10): in (i). ....
Phương pháp 2: Nếu mục đích của vòng lặp là tạo danh sách, hãy sử dụng danh sách hiểu thay vào đó: bình phương = [i ** 2 cho i trong phạm vi (10)] ..

Chúng ta có thể sử dụng nếu

Trong hầu hết các ngôn ngữ lập trình (C/C ++, Java, v.v.), việc sử dụng tuyên bố khác đã bị hạn chế với các câu lệnh IF có điều kiện. Nhưng Python cũng cho phép chúng tôi sử dụng điều kiện khác với các vòng lặp.Python also allows us to use the else condition with for loops.

Chúng ta có thể viết nếu khác thành một dòng trong Python không?

Python không có toán tử ternary.Nhưng trong Python, chúng ta có thể sử dụng IF-Else trong một dòng và nó sẽ tạo ra hiệu ứng tương tự như toán tử ternary.

Làm thế nào để bạn viết nhiều nếu

Để đặt một câu lệnh if-then-else trong một dòng, hãy sử dụng toán tử ternary x của Python nếu c other y.Điều này trả về kết quả của biểu thức X nếu điều kiện Bolean C đánh giá là TRUE.Mặt khác, toán tử ternary trả về biểu thức thay thế y.use Python's ternary operator x if c else y . This returns the result of expression x if the Boolean condition c evaluates to True . Otherwise, the ternary operator returns the alternative expression y .