代码之家  ›  专栏  ›  技术社区  ›  technomalogical

创建一个修改了一个元素的新元组

  •  3
  • technomalogical  · 技术社区  · 15 年前

    (我正在使用OpenXMLSDK与IronPython中的WordprocessingDocument对象交互工作,但这确实是一个普遍的Python问题,应该适用于所有实现)

    我正试图从一些Word文档中找出一些表格。对于每个表,

    for row in rows:
        t = tuple([c.InnerText for c in row.Descendants[TableCell]()])
    

    t[1] 对于每个元组,我需要对数据应用正则表达式。我知道元组是不可变的,所以我很乐意创建一个新的元组,或者以不同的方式构建元组。鉴于此 row.Descendants[TableCell]() 返回一个迭代器,我想修改 n 返回第个元素?

    我现在的暴力方法是从左切片创建一个元组( t[:n-1] ),中修改的数据 t[n] 右边的那一片呢( t[n+1:] )但是我觉得 itertools 模块应该有一些东西来帮助我。

    4 回复  |  直到 15 年前
        1
  •  6
  •   Alex Martelli    15 年前
    def item(i, v):
      if i != 1: return v
      return strangestuff(v)
    
    for row in rows:
      t = tuple(item(i, c.InnerText)
                for i, c in enumerate(row.Descendants[TableCell]())
               )
    
        2
  •  2
  •   hughdbrown    15 年前

    我会这样做:

    temp_list = [c.InnerText for c in row.Descendants[TableCell]()]
    temp_list[2] = "Something different"
    t = tuple(temp_list)
    

    它的工作原理如下:

    >>> temp_list = [i for i in range(4)]
    >>> temp_list[2] = "Something different"
    >>> t = tuple(temp_list)
    >>> t
    (0, 1, 'Something different', 3)
    
        3
  •  1
  •   Pavel Minaev    15 年前

    for row in rows:
        t1, t2, t3, t4 = tuple([c.InnerText for c in row.Descendants[TableCell]()])
        t1 = ...
        t = (t1, t2, t3, t4)
    
        4
  •  0
  •   jrodman    15 年前

    l=列表(旧元组) l[2]=foo t=元组(l)

    newtuple=update(oldtuple,(无,无,val,无))

    或许正确的结构是拉链

    newtuple=update(oldtuple,((2,val),(3,val)))