2016-03-02 17 views
5

Câu hỏi đơn giản vì tôi chỉ muốn viết thêm mã pythonic. Tôi muốn chuyển đổi những điều sau đây thành danh sách hiểuđọc danh sách với các vòng lặp đồng thời python

index_row = 0 
for row in stake_year.iterrows(): 
    self.assertTrue(row[0] == counts[index_row][0]) 
    self.assertTrue(row[1][0] == counts[index_row][1]) 
    index_row += 1 

Điều tôi không hiểu là cách đi qua danh sách đếm. Tôi không muốn lồng vào nhau như:

[self.assertTrue(x[0] == counts[y][0] for x in stake_year for y in counts] 

Mã tôi hiện đang làm việc nhưng tôi muốn hiểu python tốt hơn và sử dụng ngôn ngữ như nó nên được sử dụng.

+2

Trông với tôi như bạn muốn sử dụng 'liệt kê()' – gtlambert

+1

Danh sách comprehensions là để tạo danh sách, chứ không phải để thực hiện vòng lặp. – zondo

+1

Liệt kê là những gì tôi muốn. Tôi không nên gọi đây là một danh sách hiểu, nhưng đó là tất cả một phần của việc học. Cảm ơn mọi người. – cryptoref

Trả lời

7

Cách pythonic hơn để sử dụng trong trường hợp của bạn là sử dụng enumerate:

for index_row, row in enumerate(stake_year.iterrows()): 
    self.assertTrue(row[0] == counts[index_row][0]) 
    self.assertTrue(row[1][0] == counts[index_row][1]) 
+0

Điều này là hoàn hảo và liệt kê bây giờ có ý nghĩa. Cảm ơn @minitoto. – cryptoref

+0

bạn được chào đón – tinySandy

5

Không.

Việc hiểu danh sách không theo định nghĩa nhiều hơn so với các vòng lặp đơn giản - chỉ khi các vòng lặp này được thiết kế để xây dựng danh sách mới (hoặc dicts, bộ vv) và nếu listcomp dễ đọc hơn vòng lặp.

Đây không phải là trường hợp trong ví dụ của bạn (bạn không xây dựng bất cứ điều gì), và bạn không nên sử dụng listcomp chỉ cho các tác dụng phụ của nó, điều đó sẽ là không gây nghiện.

Vì vậy, nó là tốt để chuyển đổi

result = [] 
for line in lines: 
    result.append(line.upper()) 

vào

result = [line.upper() for line in lines] 

nhưng không ví dụ của bạn.

+0

Cảm ơn các bình luận Tim, tôi là một con khủng long cũ của những người có niềm vui học python và cuộc hành trình đã được thực sự vui vẻ. Tôi tiếp tục cố gắng để viết lắp ráp và đó không phải luôn luôn là cách tốt nhất trong python :) – cryptoref

Các vấn đề liên quan