【问题标题】:Replacing items in nested array and list-tuple替换嵌套数组和列表元组中的项目
【发布时间】:2014-06-28 08:34:10
【问题描述】:

祝大家有美好的一天。

我一直在寻找一种方法来替换数组中的项目。

基本上我有一个嵌套列表的数组,看起来像这样:

array = [ ('a', 'a'), 'c', ('c', 'a'), 'g', 'g', ('h', 'a'), 'a']

现在我正在寻找一种方法将所有出现的“a”替换为“z”。

我想使用以下代码行来实现这一点:

new_array = [w.replace('a', 'z') for w in array]
new_array = [ ('z', 'z'), 'c', ('c', 'z'), 'g', 'g', ('h', 'z'), 'a']

然而,不幸的是,我收到以下错误:

AttributeError: 'tuple' 对象没有属性 'replace'。

我知道主要问题是由使用元组 (a, x) 引起的,但它们是所需数组的关键部分。

我已经花费了数小时寻找解决方法,如果有任何正确方向的提示,我将不胜感激。

感谢您的帮助!

【问题讨论】:

  • Python 没有数组作为核心数据结构——这些是列表。
  • 元组是不可变的,要么替换整个元组,要么使用列表。
  • 为什么列表中有元组和单个值?

标签: python arrays python-3.x tuples


【解决方案1】:
def replace(value, find, rep):
    if isinstance(value, tuple):
        return tuple(rep if val==find else val for val in value)
    return value

new_array = [replace(val, 'a', 'z') for val in array]

最后一个 ) 应该是 ]。

【讨论】:

  • 只需要把)末尾的]替换成new_array = [replace(val, 'a', 'z') for val in array)即可
【解决方案2】:
  array = [ ('a', 'a'), 'c', ('c', 'a'), 'g', 'g', ('h', 'a'), 'a']
  map(lambda l: tuple(i if i != 'a' else 'z' for i in l)  if isinstance(l, tuple) else l, array) 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多