【问题标题】:Replace double quotations with brackets in a Python List of Strings在 Python 字符串列表中用括号替换双引号
【发布时间】:2018-11-28 17:47:52
【问题描述】:

这是我当前列表的格式:

["'There's no going back', 'pop'", "'Mark my words', 'pop'", "'This love will make you levitate', 'pop'", "'Like a bird, like a bird without a cage', 'pop'"]

我想把它转换成以下格式:

[('There\'s no going back', 'pop'), ('Mark my words', 'pop'), ('This love will make you levitate', 'pop'), ('Like a bird, like a bird without a cage', 'pop')]

所以我需要将输入字符串标记为元组。但我不确定如何做到这一点,因为“”存在,因为它主要是一个字符串。

如果需要额外的上下文,我会以上述格式抓取大量数据,并使用朴素贝叶斯分类器对其进行处理,我需要括号格式的数据。如果它更有效,我愿意尝试不同的方法。

【问题讨论】:

  • 如果您的内部字符串中没有撇号,这会容易得多。另外,你试过什么?
  • 不清楚您的预期输出是什么,因为您提供的不是有效的 Python 文字/表达式。
  • 提供的输入输出肯定是有效的,第一个是字符串列表,第二个是元组列表。第一个是原始输入的字符串,第二个是标记为元组的字符串。
  • @PrianshShah 不是,这是一个语法错误,从语法突出显示中应该很明显。这也不清楚,因为"字符串对象表示 的一部分。虽然你的解释是合理的。
  • 语法高亮问题是由第一个元组的第一个元素引起的,它有一个未转义的';您肯定可以通过[x.replace("'",'').split(', ') for x in xs] 获得所需的输出。如果有帮助,我会继续编辑原始问题以转义字符串并允许语法突出显示。

标签: python string list text-processing naivebayes


【解决方案1】:

使用replacesplit

lst = ["'There's no going back', 'pop'", "'Mark my words', 'pop'", "'This love will make you levitate', 'pop'", "'Like a bird, like a bird without a cage', 'pop'"]

print([tuple(x.replace('\'', '').split(',')) for x in lst])

输出

[('Theres no going back', ' pop'), ('Mark my words', ' pop'), ('This love will make you levitate', ' pop'), ('Like a bird', ' like a bird without a cage', ' pop')]

【讨论】:

  • 需要注意的是,在转换为 Tuple 时,性能既有收益也有损失。如果 OP 在不断使用的上下文中需要这个,那么 tuple() 是一个 O(n) 操作并且可能效率低下。但是,如果在一开始就进行预处理并且时间不敏感,那么tuple 在存储时使用的内存比列表少,因此效率更高(在给出的示例中,元组使用 64 位,而列表使用 160 位)
  • @PrianshShah 是的,预处理发生在最开始。另外我指的是 nltk 朴素贝叶斯分类器,所以它接受的就是这种格式。
猜你喜欢
  • 2019-05-22
  • 1970-01-01
  • 2019-11-01
  • 2023-03-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多