Sử dụng danh sách của bạn comp dải là gọi hai lần, sử dụng một exp gen nếu bạn chỉ muốn dải gọi một lần và giữ cho sự hiểu biết:
input_list[:] = [x for x in (s.strip() for s in input_list) if x]
Input:
input_list = [' \n ',' data1\n ',' data2\n',' \n','data3\n']
Đầu ra:
['data1', 'data2', 'data3']
input_list[:]
sẽ thay đổi danh sách ban đầu có thể hoặc không thể là thứ bạn muốn, nếu bạn thực sự muốn tạo danh sách mới chỉ cần sử dụng cleaned_up_list = ...
.
tôi luôn luôn tìm thấy bằng itertools.imap
trong python 2 và map
trong python 3 thay vì các máy phát điện là hiệu quả nhất cho đầu vào lớn hơn:
from itertools import imap
input_list[:] = [x for x in imap(str.strip, input_list) if x]
Một số timings với cách tiếp cận khác nhau:
In [17]: input_list = [choice(input_list) for _ in range(1000000)]
In [19]: timeit filter(None, imap(str.strip, input_list))
10 loops, best of 3: 115 ms per loop
In [20]: timeit list(ifilter(None,imap(str.strip,input_list)))
10 loops, best of 3: 110 ms per loop
In [21]: timeit [x for x in imap(str.strip,input_list) if x]
10 loops, best of 3: 125 ms per loop
In [22]: timeit [x for x in (s.strip() for s in input_list) if x]
10 loops, best of 3: 145 ms per loop
In [23]: timeit [data.strip() for data in input_list if data.strip()]
10 loops, best of 3: 160 ms per loop
In [24]: %%timeit
....: cleaned_up_list = []
....: for data in input_list:
....: clean_data = data.strip()
....: if clean_data:
....: cleaned_up_list.append(clean_data)
....:
10 loops, best of 3: 150 ms per loop
In [25]:
In [25]: %%timeit
....: cleaned_up_list = []
....: append = cleaned_up_list.append
....: for data in input_list:
....: clean_data = data.strip()
....: if clean_data:
....: append(clean_data)
....:
10 loops, best of 3: 123 ms per loop
Cách tiếp cận nhanh nhất thực tế là itertools.ifilter
kết hợp với itertools.imap
theo sau là filter
với imap
.
Xóa nhu cầu đánh giá lại tham chiếu hàm list.append
mỗi lần lặp lại hiệu quả hơn, nếu bạn bị mắc kẹt với vòng lặp và muốn phương pháp hiệu quả nhất thì đó là một giải pháp khả thi.
Bạn có thể tự mình tìm ra điều này bằng cách viết hàm tùy chỉnh tăng số lượt truy cập và/hoặc in ra mỗi khi được gọi. –