我有一个regexp,它返回一个像[('2', '2', '0')]
这样的列表。如何迭代上述列表中的每个项目?
>>> for i in k:
... print i
...
('2', '2', '0')
当试图访问列表中的元素时,我们必须以这种方式访问
>>> k[0][0]
'2'
>>>
评论中的其他问题: 如何验证该元组中的每个元素?我试过这个:
for i in k:
print i
for j in i:
if j == 2:
print 'yes'
else:
print 'no'
答案 0 :(得分:4)
看起来你想要这样做:
for i in k[0]:
这说明k
的第一个元素中的元素循环,在这种情况下是tuple。 e.g。
>>> k = [('2', '2', '0')]
>>> for i in k[0]:
... print(i)
...
2
2
0
如果您从正则表达式操作中获取元组列表,我假设您正在调用re.findall()
。请记住,您可能会返回一个包含多个元组的列表(如果字符串的多个部分与正则表达式匹配)。这可能是不可能的,例如,如果您的模式只能匹配字符串的开头(^
)或结束($
),但值得注意的是您的列表可能不止一个元素long,在这种情况下,您需要迭代内部和外部列表。考虑:
>>> k = [('2', '2', '0'), ('3', '3', '1')]
>>> for i in k[0]:
... print(i)
...
2
2
0
有了这个,我们失去了第二个元素。如果你不能确定你的列表总是一个元素长,你需要一个内部循环,如下所示:
>>> for i in k:
... print(i)
... for j in i:
... print(j)
...
('2', '2', '0')
2
2
0
('3', '3', '1')
3
3
1
这使我们可以访问每个元组(如i
)以及每个元组的每个元素(如j
)。您的确切用例将决定您需要的上述内容,但这些都是基本选项。
如何验证该元组中的每个元素?
听起来像“验证”你的意思是“是值2”。请注意,元组包含您匹配的字符串的子字符串,但样本中的条件if j == 2:
正在检查j
是数字 2
。您可以将其更改为if j == '2':
(注意引号)或将其转换为if int(j) == 2:
的整数。
for i in k:
for j in i:
print('yes' if j == '2' else 'no')
答案 1 :(得分:1)
您可以通过执行以下操作迭代所有匹配项和每个匹配项的所有值:
for match in [('2', '2', '0')]:
print match
for value in match:
print value
而且,正如您所提到的,您可以使用match[0]
来访问匹配的特定值。
答案 2 :(得分:0)
它只是一个元素(一个元组)的列表。试试这样:
for x in k[0]:
print x
你要求循环遍历列表的第一个元素,一个包含三个元素的元组。
要在评论中回答您的问题,您的列表中包含所有字符串。
for x in k[0]:
if x == '2':
print 'yes'
else:
print 'sorry'
这将打印出来
yes
yes
sorry
答案 3 :(得分:0)
你的regexp看起来像是返回一个列表,其中每个元素都是一个元组。你有一个元素,一个长度为3的元组,所以循环将是:
for i in k[0]:
print i
答案 4 :(得分:0)
您有一个元组列表,在您的情况下,它只有一个元素。
假设你有超过1个元组循环,你需要这样的东西:
>>> k = [('2', '2', '0')]
>>> for i in k:
... for j in i:
... print j
...
2
2
0
但是,如果您只是需要第一个元素,则可以消除内部循环:
>>> for i in k[0]:
... print i
2
2
0
答案 5 :(得分:0)
如果您需要打印以外的其他内容,则应列出一个列表,然后根据需要进行访问:
list = []
for x in k:
list.extend(y for y in x)
这涵盖了已经回答的所有案例,并为您提供了一份工作清单。