Python Tuple Unpacking

后端 未结 3 1917
攒了一身酷
攒了一身酷 2020-12-31 11:05

If I have

 nums_and_words = [(1, \'one\'), (2, \'two\'), (3, \'three\')]

and would like

nums = [1, 2, 3]
words= [\'one\', \         


        
相关标签:
3条回答
  • 2020-12-31 11:34

    Use zip, then unpack:

    nums_and_words = [(1, 'one'), (2, 'two'), (3, 'three')]
    nums, words = zip(*nums_and_words)
    

    Actually, this "unpacks" twice: First, when you pass the list of lists to zip with *, then when you distribute the result to the two variables.

    You can think of zip(*list_of_lists) as 'transposing' the argument:

       zip(*[(1, 'one'), (2, 'two'), (3, 'three')])
    == zip(  (1, 'one'), (2, 'two'), (3, 'three') )
    == [(1, 2, 3), ('one', 'two', 'three')]
    

    Note that this will give you tuples; if you really need lists, you'd have to map the result:

    nums, words = map(list, zip(*nums_and_words))
    
    0 讨论(0)
  • 2020-12-31 11:52

    Using List comprehension ..

    nums = [nums_and_words[x][0] for x in xrange(len(nums_and_words)) ]
    words = [nums_and_words[x][1] for x in xrange(len(nums_and_words)) ]
    
    Testing if this works
    print nums ,'&', words 
    
    0 讨论(0)
  • 2020-12-31 11:53

    Just unzip and create lists:

    nums = list(zip(*nums_and_words)[0])
    word = list(zip(*nums_and_words)[1])
    

    See the zip documentation.

    0 讨论(0)
提交回复
热议问题