【问题标题】:Can i change a list into string, modify it, and change it to list again?我可以将列表更改为字符串,对其进行修改,然后再次将其更改为列表吗?
【发布时间】:2012-07-14 10:41:41
【问题描述】:

例如,我有一个这样的列表:

lista = ['abc', 'alpha', 'bravo', 'charlie']

然后我把它改成字符串并修改它:

lista = str(lista)
re.sub('a','b', lista)

然后我会得到一个“字符串”,例如:

lista = ['bbc','blphb','brbvo','chbrlie']

我希望这再次成为一个列表。

有什么建议吗?或者我可以修改列表中的内容吗?简单的方法是最好的。

编辑: 我正在使用 beutifulsoup 的 findall 来制作列表。代码如下:

desclist = soup.findAll('description')
desclist[:] = (x.replace(r'.+', ' ') for x in desclist)
print desclist

我正在尝试更改 '.'或 '.' 到 ' ' 但它说非类型对象不可调用..

【问题讨论】:

  • 建议:不要使用 hacky 方法,比如替换列表的字符串表示的字母...

标签: python regex string list


【解决方案1】:

无需将列表转换为字符串。也不需要使用正则表达式来进行简单的字符串替换。只需对列表中的每个项目执行替换并将它们存储在新列表中:

lista = [x.replace('a', 'b') for x in lista]

您也可以就地修改列表:

lista[:] = (x.replace('a', 'b') for x in lista)

【讨论】:

  • 我对此进行了计时,并且在切片分配上使用生成器比列表组合慢,您有什么情况会更快吗?
  • 哇,谢谢!我不知道它可以这么简单!你帮了我很多:)
  • 呃哦..我有一个错误说'nontype object is not callable..'我该怎么办:(
  • 等我把它添加到问题上
  • 那可能不是普通的 python list。不要使用就地语法。
【解决方案2】:

使用list comprehension 对列表中的每个成员采取行动:

In [1]: import re

In [2]: lista = ['abc', 'alpha', 'bravo', 'charlie']

In [3]: lista = [re.sub('a','b',x) for x in lista]

In [4]: lista
Out[4]: ['bbc', 'blphb', 'brbvo', 'chbrlie']

【讨论】:

  • 你确定吗?我已经更改了答案以显示所有步骤。 (我已经更改了字母 ell,如果出现问题,它可能会与第一个混淆。)
  • 它适用于您的示例,但不适用于我的.. :( desclist = [re.sub('a','b',x) for x in desclist] File "/ usr/lib/python2.7/re.py”,第 151 行,在 sub return _compile(pattern, flags).sub(repl, string, count) TypeError: expected string or buffer
  • 但是是desclist字符串的元素吗?
  • 哦..它不是..:(我用beautifulsoup所以它的类型不是字符串...我可以改变它吗?抱歉打扰你...
猜你喜欢
  • 2015-10-24
  • 1970-01-01
  • 2019-07-24
  • 1970-01-01
  • 2022-11-20
  • 1970-01-01
  • 2015-10-24
  • 2015-10-28
  • 2021-04-01
相关资源
最近更新 更多