删除字符串列表中的字符

时间:2011-11-26 23:54:25

标签: python

如果我有一个字符串列表,例如:

[("aaaa8"),("bb8"),("ccc8"),("dddddd8")...]

为了摆脱每个字符串中的所有8,我该怎么做?我尝试在for循环中使用stripreplace,但它不像普通字符串(不在列表中)那样工作。有没有人有建议?

6 个答案:

答案 0 :(得分:40)

试试这个:

lst = [("aaaa8"),("bb8"),("ccc8"),("dddddd8")]
print([s.strip('8') for s in lst]) # remove the 8 from the string borders
print([s.replace('8', '') for s in lst]) # remove all the 8s 

答案 1 :(得分:9)

除了使用循环和理解之外,您还可以使用map

lst = [("aaaa8"),("bb8"),("ccc8"),("dddddd8")]
mylst = map(lambda each:each.strip("8"), lst)
print mylst

答案 2 :(得分:1)

mylist = [("aaaa8"),("bb8"),("ccc8"),("dddddd8")]
print mylist
j=0
for i in mylist:
    mylist[j]=i.rstrip("8")
    j+=1
print mylist

答案 3 :(得分:1)

更快的方法是加入列表,替换8并拆分新字符串:

mylist = [("aaaa8"),("bb8"),("ccc8"),("dddddd8")]
mylist = ' '.join(mylist).replace('8','').split()
print mylist

答案 4 :(得分:0)

这是使用正则表达式的简短单行:

print [re.compile(r"8").sub("", m) for m in mylist]

如果我们将正则表达式操作分开并改进了namings:

pattern = re.compile(r"8") # Create the regular expression to match
res = [pattern.sub("", match) for match in mylist] # Remove match on each element
print res

答案 5 :(得分:-2)

lst = [("aaaa8"),("bb8"),("ccc8"),("dddddd8")...]

msg = filter(lambda x : x != "8", lst)

print msg

编辑: 对于遇到这篇文章的人来说,只是为了理解上面的内容,从列表中删除任何等于8的元素。

假设我们使用上面的例子,第一个元素(“aaaaa8”)将不等于8,因此它将被删除。

为了使这个(有点工作吗?)问题的意图如何,我们可以执行类似于此的事情

msg = filter(lambda x: x != "8", map(lambda y: list(y), lst))
  • 我现在不在翻译中,所以当然里程可能会有所不同,我们可能需要索引,所以我们列出(y [0])将是上述解释目的的唯一修改。

这样做是将列表中的每个元素拆分成一个字符数组,这样(“aaaa8”)将成为[“a”,“a”,“a”,“a”,“8”]。

这将导致数据类型看起来像这样

msg = [[“a”,“a”,“a”,“a”],[“b”,“b”] ......]

所以最后要把它包起来,我们必须将它映射到大致相同的类型

msg = list(map(lambda q: ''.join(q), filter(lambda x: x != "8", map(lambda y: list(y[0]), lst))))

我绝对不会推荐它,但如果你真的想玩地图和过滤器,我认为你可以用一条线来做。