Có vẻ như bạn đang bối rối list comprehension với looping constructs bằng Python.
Danh sách hiểu được sản xuất - danh sách! Nó không cho chính nó vào một nhiệm vụ duy nhất trong một danh sách hiện có. (Mặc dù bạn có thể tra tấn cú pháp để làm điều đó ...)
Mặc dù nó không rõ ràng những gì bạn đang cố làm từ mã của bạn, tôi nghĩ nó giống với vòng lặp hơn danh sách (kiểm soát luồng) vs sản xuất một danh sách (danh sách hiểu)
Vòng qua danh sách như thế này:
for pattern in patterns:
if lst[0] == pattern: lst[0]=''
Đó là một cách hợp lý để làm điều này, và là những gì bạn sẽ làm gì trong C, Pascal, vv Nhưng bạn cũng có thể chỉ cần kiểm tra danh sách cho một giá trị và thay đổi nó:
if lst[0] in patterns: lst[0] = ''
Hoặc, nếu bạn không biết chỉ số:
i=lst.index[pattern]
lst[i]=''
hoặc, nếu bạn có một danh sách liệt kê và muốn thay đổi mỗi phần tử đầu tiên của mỗi sublist:
for i, sublst in enumerate(lst):
if sublst[i][0] in patterns: sublist[i][0]=''
vv, v.v.
Nếu bạn muốn áp dụng điều gì đó cho từng phần tử trong danh sách, bạn có thể xem bằng cách sử dụng danh sách hoặc bản đồ, hoặc một trong nhiều công cụ khác trong bộ công cụ Python.
Cá nhân, tôi thường có xu hướng sử dụng comprehensions danh sách hơn để tạo danh sách:
l=[[ x for x in range(5) ] for y in range(4)] #init a list of lists...
Đó là tự nhiên hơn:
l=[]
for i in range(4):
l.append([])
for j in range(5):
l[i].append(j)
Nhưng để sửa đổi mà cùng một danh sách của danh sách, mà là nhiều hơn có thể hiểu được?
này:
l=[['new value' if j==0 else l[i][j] for j in range(len(l[i]))] for i in range(len(l))]
hay này:
for i,outter in enumerate(l):
l[i][0]='new value'
YMMV
Here là một hướng dẫn tuyệt vời về điều này.
Tôi nghĩ rằng bạn có điều này bên trong ... – dawg
Điều này không rõ ràng. Đó là một dấu hiệu cảnh báo ngay lập tức. –