Python 删除字符串列表中的字符

Python 删除字符串列表中的字符,python,Python,如果我有一个字符串列表,例如: [("aaaa8"),("bb8"),("ccc8"),("dddddd8")...] 我应该怎么做才能去掉每个字符串中的所有8s?我尝试在for循环中使用strip或replace,但它的工作方式与普通字符串(不在列表中)不同。有人有什么建议吗?试试这个: lst = [("aaaa8"),("bb8"),("ccc8"),("dddddd8")] print([s.strip('8') for s in lst]) # remove the 8 from t

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

[("aaaa8"),("bb8"),("ccc8"),("dddddd8")...]
我应该怎么做才能去掉每个字符串中的所有
8
s?我尝试在for循环中使用
strip
replace
,但它的工作方式与普通字符串(不在列表中)不同。有人有什么建议吗?

试试这个:

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 

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

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

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

mylist = [("aaaa8"),("bb8"),("ccc8"),("dddddd8")]
mylist = ' '.join(mylist).replace('8','').split()
print mylist
编辑:
对于任何看到这篇文章的人来说,仅仅为了理解上面的内容,就从列表中删除了等于8的元素

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

为了使这(有点工作?)与问题的意图是我们可以执行类似的事情

msg = filter(lambda x: x != "8", map(lambda y: list(y), lst))
  • 我目前不在译员中,因此里程数可能会有所不同,我们可能需要编制索引,因此我们确实需要列出(y[0])将是出于此解释目的对上述内容的唯一修改
这样做的目的是将列表中的每个元素拆分为一个字符数组,使(“aaaa8”)变成[“a”、“a”、“a”、“8”]

这将导致数据类型如下所示

味精=[“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))))

我绝对不会推荐它,但如果你真的想玩map和filter,我认为你可以用一行代码来完成它。

这里有一个使用正则表达式的简短的一行代码:

print [re.compile(r"8").sub("", m) for m in mylist]
如果我们分离正则表达式操作并改进命名:

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

他可能不想破坏他的数据结构,您的语句得到的是字符串列表,但有字符串元组列表,您不应该将s.strip('8')替换为(s.strip('8'),)?@JanVorcak不,原始列表不是元组列表,而是字符串列表。正如您自己编写的那样,您通过
(x,)
而不仅仅是
(x)
.s创建了一个元组。列表中的strip()正是我想要的。谢谢@jochen!请注意,在Python3中,
map
返回一个需要首先转换为列表的映射对象。我还没有机会尝试Python3,因为我有很多依赖python2的库。仔细想想,我想我可能会为新项目迁移到3。顺便说一句,你的列表中不需要括号。除非我遗漏了什么,否则写lst=[“aaaa8”,“bb8”,“ccc8”,“dddddd 8”]同样正确(在本例中,我认为更直观),为了帮助您更好地学习,也许您应该显示您的代码,这样我们就可以评论它为什么没有像您预期的那样工作。这不是pythonic!!True@java_mouse提供了一个python式的,而不是说我们大多数人都不知道的东西。对于任何看到这篇文章的人来说,为了理解上面的内容,从列表中删除任何等于8的元素。假设我们使用上面的示例,第一个元素(“aaaa8”)将不等于8,因此它将被删除。为了实现这一点(某种程度上可行?),我们可以执行类似于“msg=filter(lambda x:x!=“8”,map(lambda y:list(y),lst))”````这样做的目的是将列表中的每个元素拆分为一个字符数组,这样(“aaaa8”)将变成[“a”、“a”、“a”、“a”、“8”]。如果单词的结尾也有一些“8”(例如,
“xxx8xx8”
),并且要求去掉最右边的“8”,则这不适用。
print [re.compile(r"8").sub("", m) for m in mylist]
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