我怎么能遍历这个列表?

时间:2014-08-04 13:51:24

标签: python list for-loop tuples

我有一个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' 

6 个答案:

答案 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)

这涵盖了已经回答的所有案例,并为您提供了一份工作清单。