假设我们有字符串和字符串列表:
字符串:
str1 = <common-part>
字符串列表:
[<common-part>-<random-text-a>, <common-part>-<random-text-b>]
获得此类列表的最佳(在可读性和代码纯度的情况下)是什么:
[<random-text-a>, <random-text-b>]
答案 0 :(得分:5)
我会使用os.path.commonprefix
计算所有字符串的公共前缀,然后对字符串进行切片以删除该前缀(此函数位于os.path
模块中但不检查路径分隔符,它&# 39;可用于通用语境中):
import os
p = ["<common-part>-<some-text-a>", "<common-part>-<random-text-b>"]
commonprefix = os.path.commonprefix(p)
new_p = [x[len(commonprefix):] for x in p]
print(new_p)
结果(因为commonprefix
是""<common-part>-<"
):
['some-text-a>', 'random-text-b>']
注释:
len
来对结果进行切片,而不是str.replace()
:它的速度更快,而且它只会删除字符串的开头,因为我们< em> know 所有字符串都以此前缀开头。答案 1 :(得分:2)
你可以使用列表推导,它们非常pythonic:
[newstr.replace(str1, '', 1) for newstr in list_of_strings]
newstr.replace(str, '', 1)
只会替换第一次出现的str1。
感谢@ ev-kounis建议
答案 2 :(得分:2)
MyList = ["xxx-56", "xxx-57", "xxx-58"]
MyList = [x[len(prefix):] for x in MyList] # for each x in the list,
# this function will return x[len(prefix):]
# which is the string x minus the length of the prefix string
print(MyList)
---> ['56', '57', '58']
答案 3 :(得分:2)
我会做的......
common = "Hello_"
lines = ["Hello_1 !", "Hello_2 !", "Hello_3 !"]
new_lines = []
for line in lines:
# Finding first occurrence of the word we want to remove.
startIndex = line.find(common) + len(common)
new_lines.append(line[startIndex:])
print new_lines
自从我们参与其中以来,只测试Jean-FrançoisFabre的表现:
from timeit import timeit
import os
def test_fabre(lines):
# import os
commonprefix = os.path.commonprefix(lines)
return [x[len(commonprefix):] for x in lines]
def test_insert(common, lines):
new_lines = []
for line in lines:
startIndex = line.find(common) + len(common)
new_lines.append(line[startIndex:])
return new_lines
print timeit("test_insert(common, lines)", 'from __main__ import test_insert; common="Hello_";lines = ["Hello_1 !", "Hello_2 !", "Hello_3 !"]')
print timeit("test_fabre(lines)", 'from __main__ import test_fabre; lines = ["Hello_1 !", "Hello_2 !", "Hello_3 !"]')
# test_insert outputs : 2.92963575145
# test_fabre outputs : 4.23027790484 (with import os OUTside func)
# test_fabre outputs : 5.86552750264 (with import os INside func)
答案 4 :(得分:0)
str1 = "hello"
list1 = ["hello1", "hello2", "hello3"]
list2 = []
for i in list1:
list2.append(i.replace(str1,""))
print list2
这是你能做的最简单的方法。