My 1 cho rõ ràng vòng lặp for với .extend()
>>> import this
The Zen of Python, by Tim Peters
Beautiful is better than ugly.
Explicit is better than implicit.
...
Readability counts.
...
In the face of ambiguity, refuse the temptation to guess.
...
Khi đo, đồng bằng vòng lặp for là nhanh hơn so với dụng phụ có hiệu lực bằng cách hiểu danh sách.
import itertools
import timeit
def flattenListOfLists(lst):
result = []
for sublist in lst:
result.extend(sublist)
return result
def flattenListOfLists2(lst):
result = []
[result.extend(sublist) for sublist in lst] # uggly side effect ;)
return result
def flattenIterTools(lst):
return list(itertools.chain(*lst))
a = ["a", "i", "u", "e", "o"]
k = ["ka", "ki", "ku", "ke", "ko"]
g = ["ga", "gi", "gu", "ge", "go"]
s = ["sa", "shi", "su", "se", "so"]
z = ["za", "ji", "zu", "ze", "zo"]
t = ["ta", "chi", "tsu", "te", "to"]
d = ["da", "du", "de", "do"]
n = ["na", "ni", "nu", "ne", "no"]
h = ["ha", "hi", "hu", "he", "ho"]
b = ["ba", "bi", "bu", "be", "bo"]
p = ["pa", "pi", "pu", "pe", "po"]
m = ["ma", "mi", "mu", "me", "mo"]
y = ["ya", "yu", "yo"]
n = ["n"]
kana = [a, k, g, s, z, t, d, n, h, b, p, m, y, n]
t = timeit.timeit('lst = flattenListOfLists(kana)', 'from __main__ import kana, flattenListOfLists', number=100000)
print 'for loop:', t
t = timeit.timeit('lst = flattenListOfLists2(kana)', 'from __main__ import kana, flattenListOfLists2', number=100000)
print 'list comprehension side effect:', t
t = timeit.timeit('lst = flattenIterTools(kana)', 'from __main__ import kana, flattenIterTools\nimport itertools', number=100000)
print 'itertools:', t
It in trên giao diện điều khiển của tôi:
for loop: 0.389831948464
list comprehension side effect: 0.468136159616
itertools: 0.620626692887
Dù sao, thời gian là dành cho lặp đi lặp lại cùng 100 ngàn lần. Số lượt đọc có thể đọc được là đối số của tôi.
Cảm ơn, tôi đã thực hiện tìm kiếm đó, nhưng không thể tìm thấy bất cứ điều gì hữu ích. Những câu trả lời này đều hữu ích, cảm ơn tất cả mọi người! :) – abkai