【问题标题】:can we delete element in list based on certain condition我们可以根据特定条件删除列表中的元素吗
【发布时间】:2020-09-08 18:14:41
【问题描述】:

我有一个 Python 列表:

test_list = ['LeBron James', 'and', 'Nina Mata', 'Dan Brown', 'Derrick Barnes', 'and',
         'Gordon C. James', 'J. Kenji López-Alt', 'and', 'Gianna Ruggiero', ]

我想要这样的输出:

final_list = ['LeBron James and Nina Mata', 'Dan Brown', 'Derrick Barnes and
         Gordon C. James', 'J. Kenji López-Alt and Gianna Ruggiero']

简而言之,我希望将一项 before '和'一项 after 'and' 组合起来。另一方面,没有 'and' 的名称不应组合并保持原样。我们如何在 Python 中做到这一点?

【问题讨论】:

  • 你能有多个“和”组吗? (喜欢["A", "and", "B", "and", "C"]

标签: arrays python-3.x string


【解决方案1】:

这是一个可能不太优雅但简单实用的解决方案:将所有单词与其中任何一个都不出现的胶合符号连接起来(例如,"~"),将生成的"~and~"s 替换为" and "s , 并再次被胶水符号分割:

"~".join(test_list).replace("~and~", " and ").split("~")
#['LeBron James and Nina Mata', 'Dan Brown', 
# 'Derrick Barnes and Gordon C. James', 
# 'J. Kenji López-Alt and Gianna Ruggiero']

这也适用于具有多个“和”的组。

【讨论】:

  • 在实践中不错的 hack,但在一般情况下并不安全。
  • @wim 这不是一般情况,而是人名的非常特殊情况。请解释一下。
  • 解释一下:要让代码使用任意字符串,您需要保证“胶水”不存在于任何值中,这甚至可能是不可能的(例如,您正在处理即将到来的字符串在无法进行前瞻的流中)。既然编写一个基于生成器的解决方案很容易,而且没有这个警告就可以工作,为什么不首先这样做呢。只是我的 2c..
  • @wim 此代码不希望与任意字符串一起使用,但如果可以,则可以选择任何不可打印的字符作为粘合,例如\x01
  • @DYZ 此代码不适用于我为从亚马逊网站提取作者姓名而构建的scrapy scraper。当我在 Scrapy 的 items.py 中使用它时,它会将每个单词分解成字母。
猜你喜欢
  • 2011-11-29
  • 2018-10-12
  • 2017-08-31
  • 1970-01-01
  • 2019-12-13
  • 1970-01-01
  • 2019-01-16
  • 2017-01-30
相关资源
最近更新 更多