Python:编译regexp问题
我有一个有趣的问题。我有一个列表列表,我希望将每个列表中除第一个元素以外的所有元素编译成正则表达式。然后把它放回清单上。列表以字符串开头 以下代码不起作用。它没有引起错误,只是似乎什么也没做。我想我已经发现了问题所在。(见下文) 代码: 我所看到的问题是,虽然Python:编译regexp问题,python,regex,list,Python,Regex,List,我有一个有趣的问题。我有一个列表列表,我希望将每个列表中除第一个元素以外的所有元素编译成正则表达式。然后把它放回清单上。列表以字符串开头 以下代码不起作用。它没有引起错误,只是似乎什么也没做。我想我已经发现了问题所在。(见下文) 代码: 我所看到的问题是,虽然list[1:][1,2,3]起作用,但list[1:][1]=2不起作用。 合适的修复方法是什么?您应该给出一个更详细的工作示例,以便进一步研究。然而,你提到的问题似乎不是一个问题。它确实有效。除非我误解了什么 >>>
list[1:][1,2,3]
起作用,但list[1:][1]=2
不起作用。
合适的修复方法是什么?您应该给出一个更详细的工作示例,以便进一步研究。然而,你提到的问题似乎不是一个问题。它确实有效。除非我误解了什么
>>> a=[1,2,3,4]
>>> a[1:]
[2, 3, 4]
>>> a[1:][0]
2
>>> a[1:][1]
3
您应该给出一个更详细的工作示例,以便进一步研究。然而,你提到的问题似乎不是一个问题。它确实有效。除非我误解了什么
>>> a=[1,2,3,4]
>>> a[1:]
[2, 3, 4]
>>> a[1:][0]
2
>>> a[1:][1]
3
将产生:
[['unix', <_sre.SRE_Pattern object at 0x100559b90>, <_sre.SRE_Pattern object
at 0x10052b870>], ['windows', <_sre.SRE_Pattern object at 0x100590828>,
<_sre.SRE_Pattern object at 0x10049b780>]]
[['unix',]['windows',
]]
将产生:
[['unix', <_sre.SRE_Pattern object at 0x100559b90>, <_sre.SRE_Pattern object
at 0x10052b870>], ['windows', <_sre.SRE_Pattern object at 0x100590828>,
<_sre.SRE_Pattern object at 0x10049b780>]]
[['unix',]['windows',
]]
为什么要费心切片?为什么不直接做
for i in range(len(groups)):
for j in range(1, len(groups[i])):
groups[i][j] = re.compile(groups[i][j])
关于您的问题的更详细解释:
Python中的“分配给切片”实际上并没有创建切片-它只是告诉原始对象替换某个范围的元素,因此为什么例如a[:2]=[1,2,3]
可以替换列表的前3个元素
但是,如果您确实创建了一个切片,然后尝试对其进行索引(a la
a[1:][0]
),那么您实际上是在对切片对象进行索引(然后修改切片对象),而不是接触原始对象。为什么要费事进行切片?为什么不直接做
for i in range(len(groups)):
for j in range(1, len(groups[i])):
groups[i][j] = re.compile(groups[i][j])
关于您的问题的更详细解释:
Python中的“分配给切片”实际上并没有创建切片-它只是告诉原始对象替换某个范围的元素,因此为什么例如a[:2]=[1,2,3]
可以替换列表的前3个元素
但是,如果您确实创建了一个切片,然后尝试对其进行索引(a la
a[1:][0]
),那么您实际上是在对切片对象进行索引(然后修改切片对象),而不是接触原始对象。有什么理由比下面的@Amber更好吗?@Skyler:如果您想要一个包含所做更改的新列表,那么这个解决方案就是这样。如果您想就地修改列表,您需要坚持使用for
循环。但归根结底,这就是使用你更容易阅读的内容。有什么理由比下面的@Amber更好吗?@Skyler:如果你想要一个新的列表,其中包含所做的更改,那么这个解决方案就可以做到这一点。如果您想就地修改列表,您需要坚持使用for
循环。但归根结底,它是使用哪一个对你来说更容易阅读。