如果我有一个字符串列表,例如:
[("aaaa8"),("bb8"),("ccc8"),("dddddd8")...]
为了摆脱每个字符串中的所有8
,我该怎么做?我尝试在for循环中使用strip
或replace
,但它不像普通字符串(不在列表中)那样工作。有没有人有建议?
答案 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))
这样做是将列表中的每个元素拆分成一个字符数组,这样(“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))))
我绝对不会推荐它,但如果你真的想玩地图和过滤器,我认为你可以用一条线来做。