如果我有一个字符串列表,例如:
[("aaaa8"),("bb8"),("ccc8"),("dddddd8")...]
我该怎么做才能摆脱每个字符串中的所有8
? 我尝试在for循环中使用strip
或replace
,但它不像在普通字符串中一样有效(不在列表中)。 有人有建议吗?
如果我有一个字符串列表,例如:
[("aaaa8"),("bb8"),("ccc8"),("dddddd8")...]
我该怎么做才能摆脱每个字符串中的所有8
? 我尝试在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
(x,)
可以创建一个一元组,而不仅仅是(x)
。 - poke除了使用循环和 for 推导式之外,您还可以使用 map。
lst = [("aaaa8"),("bb8"),("ccc8"),("dddddd8")]
mylst = map(lambda each:each.strip("8"), lst)
print mylst
map
函数返回一个映射对象,需要先将其转换为列表。 - pokemylist = [("aaaa8"),("bb8"),("ccc8"),("dddddd8")]
mylist = ' '.join(mylist).replace('8','').split()
print mylist
"xxx8xx8"
),而要求删除最右边的 '8'。 - Gino Mempinmylist = [("aaaa8"),("bb8"),("ccc8"),("dddddd8")]
print mylist
j=0
for i in mylist:
mylist[j]=i.rstrip("8")
j+=1
print mylist
这是一个使用正则表达式的简短单行代码:
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
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))))
我绝对不建议这样做,但如果你真的想尝试使用map和filter玩一下,我认为你可以用一行代码完成。
msg = filter(lambda x: x != "8", map(lambda y: list(y), lst))
这将把列表中的每个元素拆分成字符数组,因此("aaaa8")将变成["a", "a", "a", "a", "8"]。 - onaclov2000