I am writing a small script to help out with Japanese kana memorisation. How would I combine the following lists into one? I tried as follows.
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]
print kana
Run Code Online (Sandbox Code Playgroud)
Mar*_*nen 14
One way:
kana = a + k + g + s + z + t + d + n + h + b + p + m + y + n
Run Code Online (Sandbox Code Playgroud)
Jac*_*lly 14
问题是如何有效地询问如何压缩列表列表,这里回答:在python中加入列表列表.
您可以通过执行以下操作打印出所有内容:
import itertools
print list(itertools.chain(*kana))
Run Code Online (Sandbox Code Playgroud)
我对明确+1 for循环用.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.
...
Run Code Online (Sandbox Code Playgroud)
测量时,通过列表理解,plain for循环比副作用更快.
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
Run Code Online (Sandbox Code Playgroud)
它在我的控制台上打印:
for loop: 0.389831948464
list comprehension side effect: 0.468136159616
itertools: 0.620626692887
Run Code Online (Sandbox Code Playgroud)
无论如何,时间是重复相同的100万次.该可读性计数是我的观点.
kana = sum([a, k, g, s, z, t, d, n, h, b, p, m, y, n], [])
Run Code Online (Sandbox Code Playgroud)