Cia*_*arz 5 python list list-manipulation
我正在读取一个文件并构建一个列表a2。我想在前两项之后插入 3 行以a2从列表中列出。b
b = ["This is a line", "another line", "and another one"]
a2 = ['a1', 'a2', 'a3']
i = 0
for x, y in map(None, a2[0:2], a2):
i = i + 1
if x == y:
continue
else:
for newLine in b:
a2.insert(i-1, newLine)
i = i+1
print a2
Run Code Online (Sandbox Code Playgroud)
上面确实给了我预期的结果['a1', 'a2', 'This is a line', 'another line', 'and another one', 'a3'],但由于我要从巨大的文本文件中构建列表并在之间插入几行,我想我必须使其性能更加直观!
怎么样 -
a2[2:2] = b
Run Code Online (Sandbox Code Playgroud)
演示 -
>>> b = ["This is a line", "another line", "and another one"]
>>> a2 = ['a1', 'a2', 'a3']
>>> a2[2:2] = b
>>> a2
['a1', 'a2', 'This is a line', 'another line', 'and another one', 'a3']
Run Code Online (Sandbox Code Playgroud)
我所知道的一些方法的计时信息(包括OP发布的方法)-
def func1():
b = ["This is a line", "another line", "and another one"]
a2 = ['a1', 'a2', 'a3']
i = 0
for x, y in map(None, a2[0:2], a2):
i = i + 1
if x == y:
continue
else:
for newLine in b:
a2.insert(i-1, newLine)
i = i+1
return a2
def func2():
b = ["This is a line", "another line", "and another one"]
a2 = ['a1', 'a2', 'a3']
a2 = a2[:2] + b + a2[2:]
return a2
def func3():
b = ["This is a line", "another line", "and another one"]
a2 = ['a1', 'a2', 'a3']
a2[2:2] = b
return a2
import timeit
print timeit.timeit(func1,number=500000)
print timeit.timeit(func2,number=500000)
print timeit.timeit(func3,number=500000)
Run Code Online (Sandbox Code Playgroud)
结果 -
1.81288409233
0.621006011963
0.341125011444
Run Code Online (Sandbox Code Playgroud)
a具有 100000 个元素和具有 1000 个元素的时序结果b-
def func1():
global a2
global b
i = 0
for x, y in map(None, a2[0:2], a2):
i = i + 1
if x == y:
continue
else:
for newLine in b:
a2.insert(i-1, newLine)
i = i+1
break
return a2
def func2():
global a2
global b
a2 = a2[:2] + b + a2[2:]
return a2
def func3():
global a2
global b
a2[2:2] = b
return a2
def func4():
global a2
global b
a2.reverse()
b.reverse()
for i in b:
a2.insert(-2, i)
return a2
import timeit
a2 = ['a1' for _ in range(100000)]
b = ['a2' for i in range(1000)]
print timeit.timeit(func1,number=10,setup = 'from __main__ import a2,b')
print timeit.timeit(func2,number=10,setup = 'from __main__ import a2,b')
print timeit.timeit(func3,number=10,setup = 'from __main__ import a2,b')
print timeit.timeit(func4,number=10,setup = 'from __main__ import a2,b')
Run Code Online (Sandbox Code Playgroud)
结果 -
1.00535297394
0.0210499763489
0.001296043396
0.0044310092926
Run Code Online (Sandbox Code Playgroud)
参考时序测试 - https://ideone.com/k4DANI