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ựnga+= [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
6 có thể là một sự thay thế trong trường hợp đó]11 silver badges14 bronze badgesa+= [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]
Đã 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]]
5Như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
0.7 silver badges18 bronze badges[a if x[row] else b].extend[list_features[row]]