Flatten a list in python

前端 未结 7 1252
逝去的感伤
逝去的感伤 2020-12-06 19:14

I have a list like this:

[[(video1,4)], [(video2,5),(video3,8)], [(video1,5)], [(video5, 7), (video6,9)]...]

each item in this list may con

相关标签:
7条回答
  • 2020-12-06 19:47

    There is a very simple way of doing this with list comprehensions. This example has been documented in the python documentation here

    >>> # flatten a list using a listcomp with two 'for'
    >>> vec = [[1,2,3], [4,5,6], [7,8,9]]
    >>> [num for elem in vec for num in elem]
    [1, 2, 3, 4, 5, 6, 7, 8, 9]
    

    Here is the solution that you would want to implement. As per your example, this is the simplest solution

    In [59]: your_list = [[('video1',4)], [('video2',5),('video3',8)], [('video1',5)], [('video5', 7), ('video6',9)]]
    
    In [60]: improved_list = [num for elem in your_list for num in elem]
    
    In [61]: improved_list
    Out[61]: 
    [('video1', 4),
     ('video2', 5),
     ('video3', 8),
     ('video1', 5),
     ('video5', 7),
     ('video6', 9)]
    
    0 讨论(0)
  • 2020-12-06 19:54

    Try this:

    from itertools import chain 
    
    c = set()
    reqs = 0
    for vid, number in chain(*your_list): 
        c.add(vid)
        reqs += number 
    

    Also see related post Flattening a shallow list in Python.

    There should be negligible performance increase from using chain.from_iterable(list) rather than chain(*list), but it's true that the former looks cleaner.

    0 讨论(0)
  • 2020-12-06 19:54

    to extract all tuples from a data structure ...

    def get_tups(y):
        z = []
        if y:
            for x in y:
                if isinstance(x, tuple):
                    z.append(x)
                else:
                    z.extend(get_tups(x))
        return z
    

    maybe ...

    0 讨论(0)
  • 2020-12-06 20:02

    To flatten one level, you can use itertools.chain.from_iterable():

    flattened_list = itertools.chain.from_iterable(my_list)
    
    0 讨论(0)
  • 2020-12-06 20:04

    If this list is singly-nested (list of lists) you can do this, which I use a lot:

    flat_list = sum(list_of_lists, [])
    

    This works due to the fact that sum simply adds up the lists, and adding up lists works in python as expected :)

    Note: This is inefficient and some say unreadable.

    0 讨论(0)
  • 2020-12-06 20:10

    If you just want to flatten the list, just use itertools.chain.from_iterable: http://docs.python.org/library/itertools.html#itertools.chain.from_iterable

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