我有一个包含文件行的列表。
list1[0]="this is the first line"
list2[1]="this is the second line"
我也有一个字符串。
example="TTTTTTTaaaaaaaaaabcccddeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeefffff"
我想用字符串(示例)替换list [0]。但是我想保持单词长度。例如,新list1 [0]应为"TTTT TT TTa aaaaa aaaa"
。我能想到的唯一解决方案是将字符串示例转换为列表并使用for循环从字符串列表中逐字逐句读取到原始列表中。
for line in open(input, 'r'):
list1[i] = listString[i]
i=i+1
但是,根据我的理解,这不起作用,因为Python字符串是不可变的?对于初学者来说,解决这个问题的好方法是什么?
答案 0 :(得分:4)
我可能会做类似的事情:
function outputHtml() {
?>
This is test html <a href="http://google.com">google</a>
<?php
}
if ( !empty($_POST) )
{
outputHtml();
}
如果orig = "this is the first line"
repl = "TTTTTTTaaaaaaaaaabcccddeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeefffff"
def replace(orig, repl):
r = iter(repl)
result = ''.join([' ' if ch.isspace() else next(r) for ch in orig])
return result
可能比repl
短,请考虑orig
这可以通过从替换字符串中创建迭代器,然后迭代原始字符串,保留空格,但使用替换字符串中的下一个字符而不是任何非空格字符。
您可以采用的另一种方法是在一次通过r = itertools.cycle(repl)
时注意空格的索引,然后在orig
的传递中将它们插入到那些索引处并返回结果的一部分
repl
然而,我无法想象第二种方法会更快,肯定会降低内存效率,而且我发现阅读起来并不容易(事实上我觉得它更难阅读!)它也没有如果def replace(orig, repl):
spaces = [idx for idx,ch in enumerate(orig) if ch.isspace()]
repl = list(repl)
for idx in spaces:
repl.insert(idx, " ")
# add a space before that index
return ''.join(repl[:len(orig)])
短于repl
,我会有一个简单的解决方法(我猜你可以做orig
但是这比罪恶更难,但仍然不保证它会起作用)