假设我有一个包含此文本的文本文件,左边的数字表示右边有多少个字符:
2 a
1 *
3 $
如何在最快的时间内获得此输出?
aa*$$$
这是我的代码,但有N ^ 2的复杂性:
f = open('a.txt')
for item in f:
item2=item.split()
num = int(item2[0])
for i in range(num):
line+=item2[1]
print(line)
f.close()
答案 0 :(得分:4)
KISS
with open('file.txt') as f:
for line in f:
count, char = line.strip().split(' ')
print char * int(count),
答案 1 :(得分:3)
立即打印:
if (root==null){
root=new Node(i);
return; // DONE!!
}
答案 2 :(得分:1)
您可以将字符串乘以在Python中重复它们:
"foo" * 3
为您提供foofoofoo
。
line = []
with open("a.txt") as f:
for line in f:
n, c = line.rstrip().split(" ")
line.append(c * int(n))
print("".join(line))
您可以直接打印,但上面的代码可让您在字符串中获得所需的输出。
使用列表然后join
比在字符串上使用+=
更有效,因为字符串在Python中是不可变的。这意味着必须为每个+=
创建一个新字符串。当然,打印可以立即避免这个问题。
答案 3 :(得分:0)
你可以这样试试,
f = open('a.txt')
print ''.join(int(item.split()[0]) * item.split()[1] for item in f.readlines())
答案 4 :(得分:0)
您的代码实际上是O(sum(n_i)),其中n_i是行i中的数字。你不能做得更好,其他答案中的解决方案都没有,即使它们可能比你的更快。