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

Python 创建一个修改了一个元素的新元组,python,iterator,ironpython,generator,Python,Iterator,Ironpython,Generator,(我正在使用OpenXMLSDK与IronPython中的WordprocessingDocument对象交互工作,但这确实是一个普遍的Python问题,应该适用于所有实现) 我正试图从一些Word文档中找出一些表格。对于每个表, 我有一个迭代器,它为我提供表行对象。然后,我使用以下生成器语句从每一行获取一个单元元组: for row in rows: t = tuple([c.InnerText for c in row.Descendants[TableCell]()]) 每个元组

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

我正试图从一些Word文档中找出一些表格。对于每个表, 我有一个迭代器,它为我提供表行对象。然后,我使用以下生成器语句从每一行获取一个单元元组:

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


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

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

for row in rows:
    t1, t2, t3, t4 = tuple([c.InnerText for c in row.Descendants[TableCell]()])
    t1 = ...
    t = (t1, t2, t3, t4)
我会这样做:

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)

我一般都做过,但不喜欢:

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

我想要一些类似于dicts的update()

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

或许正确的结构是拉链


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

不幸的是,我要处理的列的数量因表而异,因此我不能将每个列分配给具体的变量。这就是为什么我应该始终在我的办公桌上保留一份“简而言之的Python”的副本。我不知道enumerate的内置功能,以前从未使用过它。在等待响应时,我使用itertools.izip和itertools.count编造了一个类似的结构。谢谢亚历克斯@tech&c,不客气!是的,如果不是内置的,您可以合成
enumerate
,但它是一个常用的工具,因此紧凑性和速度通常特别好;-)。
>>> temp_list = [i for i in range(4)]
>>> temp_list[2] = "Something different"
>>> t = tuple(temp_list)
>>> t
(0, 1, 'Something different', 3)