2012-08-15 61 views
0

在枚举这样的元组列表时,如何避免使用嵌套元组进行解包?枚举压缩列表时,如何避免嵌套元组解压缩?

for i, (x, y) in enumerate(zip("1234", "ABCD")): 
    # do stuff 
+1

您是否知道可以在“问题问题”表单(称为“回答自己的问题”)中勾选一个框,并一次性输入答案? – 2012-08-15 11:48:05

+2

该代码有什么问题? – jamylak 2012-08-15 11:49:06

+0

@jamylak没有什么,除了至少对我来说,这感觉比我刚刚发布的答案更尴尬。 – 2012-08-15 11:49:53

回答

1

使用itertools.count避免嵌套的元组拆包:

for i, x, y in zip(count(), "1234", "ABCD"): 
    # do stuff 
0

使用自定义zip样的函数,返回一个列表的列表,而不是一个元组列表。

def zip2(*sequences): 
    """zip(seq1 [, seq2 [...]]) -> [(seq1[0], seq2[0] ...), (...)] 

    Return a list of lists, where each list contains the i-th element 
    from each of the argument sequences. The returned list is truncated 
    in length to the length of the shortest argument sequence.""" 

    if not sequences: 
     return [] 
    result = [] 
    iterators = [iter(seq) for seq in sequences] 
    while True: 
     try: 
      items = [next(it) for it in iterators] 
     except StopIteration: 
      return result 
     result.append(items) 

for i, v in enumerate(zip2("1234", "ABCD")): 
    print i, v[0], v[1]