【问题标题】:Removing Certain character of a element from list从列表中删除元素的某些字符
【发布时间】:2015-11-13 15:40:20
【问题描述】:

如果我有一个列表,例如

List1 = ['I- m', 'I-m', 'I- m-', 'I@ am']
L2=[]
for l1 in list1:
    L2.append(l1.strip('@-'))  

如果-@ 连接到以空格分隔的任一单词,我如何删除它。例如,我必须从项目 0、2 和 3 而不是 1 中删除 -@,因为 I-m 已连接并且是同一个词。

项目 0、2 和 3 之间有空格。

结果应该是这样的:

L2=['I m','I-m', 'I m', 'I am']

但是,我可以从项目的第二个单词中删除 @。我无法从任何项目的第一个单词中删除 -。

我希望这是有道理的。

【问题讨论】:

  • SO 不是代码编写服务,如果您想获得正确的答案,您需要使用您迄今为止尝试过的代码和Minimal, Complete, and Verifiable example 更新您的问题。
  • @Kasramvd,我实际上已经尝试了几个。我试着检查这个问题。我使用 strip 函数来剥离符号。它在后面剥离 @ 但不删除 - 在项目的第一个单词中。请检查编辑部分
  • @Sam 你试过replace 功能吗?
  • @ 替换函数的问题是它替换了列表中的每个 - 和 @。它也会弄乱第一个元素。它将替换 - 从第一个元素开始,甚至认为我不想替换 - 在那一刻。

标签: python python-2.7 python-3.x


【解决方案1】:

如果字符串中有空格,您可以使用re.sub 将字符替换为空字符串:

>>> [re.sub(r'[@-]',r'',i) if ' ' in i else i for i in List1]
['I m', 'I-m', 'I m', 'I am']

【讨论】:

  • 谢谢 Kasramvd。这和 Valijon 的答案都有效。我不知道我可以在列表中应用正则表达式。我学到了很多东西。我修复了 Valijon 的表达式以添加 @。
  • @Sam 欢迎您,您也可以使用str.translate 完成此类任务。
  • 或者使用非正则表达式方法:[s.replace(': ', '').replace('@ ', '') for s in List1]
  • 没有。如果项目以@- 结尾,则不会替换
【解决方案2】:

最好的方法是迭代一个列表并应用正则表达式

import re
map(lambda x: re.sub("[\-@]([ ]|$)", "\g<1>",x), ['I- m', 'I@m', 'I-m', 'I- m-', 'I@ am'])
['I m', 'I@m', 'I-m', 'I m', 'I am']

【讨论】:

  • 是的。对不起,我的错
  • 感谢@Kasramvd 和 Valijon 对我的帮助
猜你喜欢
  • 2018-09-04
  • 2022-08-16
  • 1970-01-01
  • 1970-01-01
  • 2013-01-13
  • 2021-02-12
  • 2021-07-16
  • 2014-04-12
  • 2013-06-14
相关资源
最近更新 更多