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?
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
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
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
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>> [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
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