2011-01-08 12 views
5

Tôi muốn viết lại phần này của mã sử dụng máy phát điện:Tạo danh sách các cường quốc bậc hai của các số trong phạm vi sử dụng máy phát điện

basic = [] 
for x in range(0,11): 
    basic.append(x**2) 

Làm thế nào tôi có thể làm điều này? Đã thử:

basic.append(x**2 for x in range(0,11)) 

nhưng lỗi này gây ra lỗi cú pháp trong x**2 một phần.

+0

Mã bạn dán ở đây không làm tăng một lỗi cú pháp. (Nó sẽ không làm những gì bạn mong đợi nó để làm mặc dù, nó sẽ nối thêm một iterator lười biếng thay vì làm cho một danh sách từ các mục cho sản lượng lặp cho biết) – delnan

Trả lời

15

Bạn muốn được tốt hơn bằng cách sử dụng danh sách hiểu:

basic = [x*x for x in range(11)] 
+0

1 Và cho hồ sơ, đây là (ít nhất là khái niệm, có một sự khác biệt thực hiện mà làm cho cái này chậm hơn) giống như 'danh sách (x * x cho x trong phạm vi (11))'. – delnan

8

Bạn đang nhầm lẫn; mã của bạn không tạo ra một lỗi cú pháp, nó chỉ làm điều sai:

>>> basic = [] 
>>> basic.append(x**2 for x in range(0,11)) 
>>> basic 
[<generator object <genexpr> at 0x01E9AD78>] 
>>> 

Nếu bạn phải sử dụng một máy phát điện:

>>> basic = list(x**2 for x in range(0,11)) 
>>> basic 
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81, 100] 
>>> 

Đó là đơn giản để sử dụng danh sách hiểu:

>>> basic = [x**2 for x in range(0,11)] 
>>> basic 
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81, 100] 
>>> 
0
>>> (x**2 for x in xrange(0,11)) 
<generator object <genexpr> at 0xb7387734> 

hoặc

>>> def gen(): 
...  for x in xrange(0,11): 
...    yield x**2 
... 
>>> gen 
<function gen at 0xb738a0d4> 
>>> gen() 
<generator object gen at 0xb7387734> 
>>> 
+0

Nhưng điều đó không thực sự trả lời câu hỏi, phải không? – delnan

+0

tại sao? đó là một phần của ông viết mã bằng cách sử dụng máy phát điện – virhilo

+0

OP không có một vấn đề bằng văn bản một máy phát điện; anh ta có vấn đề khi lắp ráp danh sách. – SilentGhost

1

Sử dụng extend không append.

>>> basic=[] 
>>> basic.extend(x**2 for x in range(11)) 
>>> basic 
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81, 100] 
chưa

tốt hơn:

>>> basic = [x**2 for x in range(11)] 
>>> basic 
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81, 100]