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

2024-10-04 03:15:51 发布

您现在位置:Python中文网/ 问答频道 /正文

(我正在使用openxmlsdk在IronPython中交互地处理WordprocessingDocument对象,但这实际上是一个通用的python问题,应该适用于所有实现)

我正试图从一些Word文档中找出一些表格。对于每一张桌子, 我有一个迭代器给我表行对象。然后,我使用下面的生成器语句从每行获取一个单元格元组:

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

每个元组包含4个元素。现在,在每个元组的第t[1]列中,我需要对数据应用一个正则表达式。我知道元组是不可变的,所以我很乐意创建一个新的元组,或者以不同的方式构建元组。假定row.Descendants[TableCell]()返回一个迭代器,那么从迭代器构造元组的最Pythonic(或至少最简单的)方法是什么?我想修改返回的第n个元素?在

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


Tags: 数据对象方法in元素forwordrow
3条回答

我会这样做:

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

它的工作原理如下:

^{pr2}$

如果每个元组都包含4个元素,那么,坦白地说,我认为最好将它们分配给单个变量,对其进行操作,然后构建元组:

for row in rows:
    t1, t2, t3, t4 = tuple([c.InnerText for c in row.Descendants[TableCell]()])
    t1 = ...
    t = (t1, t2, t3, t4)
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]())
           )

相关问题 更多 >