Hướng dẫn python unpack list of lists - giải nén python danh sách danh sách

Đưa ra một danh sách các danh sách

$ python3 -mtimeit -s'l=[[1,2,3],[4,5,6], [7], [8,9]]*99;import itertools' 'list(itertools.chain.from_iterable(l))'
20000 loops, best of 5: 10.8 usec per loop
$ python3 -mtimeit -s'l=[[1,2,3],[4,5,6], [7], [8,9]]*99' '[item for sublist in l for item in sublist]'
10000 loops, best of 5: 21.7 usec per loop
$ python3 -mtimeit -s'l=[[1,2,3],[4,5,6], [7], [8,9]]*99' 'sum(l, [])'
1000 loops, best of 5: 258 usec per loop
$ python3 -mtimeit -s'l=[[1,2,3],[4,5,6], [7], [8,9]]*99;from functools import reduce' 'reduce(lambda x,y: x+y,l)'
1000 loops, best of 5: 292 usec per loop
$ python3 --version
Python 3.7.5rc1
0,

flat_list = [item for sublist in l for item in sublist]

nghĩa là:

flat_list = []
for sublist in l:
    for item in sublist:
        flat_list.append(item)

nhanh hơn các phím tắt được đăng cho đến nay. (

$ python3 -mtimeit -s'l=[[1,2,3],[4,5,6], [7], [8,9]]*99;import itertools' 'list(itertools.chain.from_iterable(l))'
20000 loops, best of 5: 10.8 usec per loop
$ python3 -mtimeit -s'l=[[1,2,3],[4,5,6], [7], [8,9]]*99' '[item for sublist in l for item in sublist]'
10000 loops, best of 5: 21.7 usec per loop
$ python3 -mtimeit -s'l=[[1,2,3],[4,5,6], [7], [8,9]]*99' 'sum(l, [])'
1000 loops, best of 5: 258 usec per loop
$ python3 -mtimeit -s'l=[[1,2,3],[4,5,6], [7], [8,9]]*99;from functools import reduce' 'reduce(lambda x,y: x+y,l)'
1000 loops, best of 5: 292 usec per loop
$ python3 --version
Python 3.7.5rc1
0 là danh sách để làm phẳng.)

Đây là chức năng tương ứng:

def flatten(l):
    return [item for sublist in l for item in sublist]

Để làm bằng chứng, bạn có thể sử dụng mô -đun

$ python3 -mtimeit -s'l=[[1,2,3],[4,5,6], [7], [8,9]]*99;import itertools' 'list(itertools.chain.from_iterable(l))'
20000 loops, best of 5: 10.8 usec per loop
$ python3 -mtimeit -s'l=[[1,2,3],[4,5,6], [7], [8,9]]*99' '[item for sublist in l for item in sublist]'
10000 loops, best of 5: 21.7 usec per loop
$ python3 -mtimeit -s'l=[[1,2,3],[4,5,6], [7], [8,9]]*99' 'sum(l, [])'
1000 loops, best of 5: 258 usec per loop
$ python3 -mtimeit -s'l=[[1,2,3],[4,5,6], [7], [8,9]]*99;from functools import reduce' 'reduce(lambda x,y: x+y,l)'
1000 loops, best of 5: 292 usec per loop
$ python3 --version
Python 3.7.5rc1
2 trong thư viện tiêu chuẩn:

$ python -mtimeit -s'l=[[1,2,3],[4,5,6], [7], [8,9]]*99' '[item for sublist in l for item in sublist]'
10000 loops, best of 3: 143 usec per loop
$ python -mtimeit -s'l=[[1,2,3],[4,5,6], [7], [8,9]]*99' 'sum(l, [])'
1000 loops, best of 3: 969 usec per loop
$ python -mtimeit -s'l=[[1,2,3],[4,5,6], [7], [8,9]]*99' 'reduce(lambda x,y: x+y,l)'
1000 loops, best of 3: 1.1 msec per loop

Giải thích: Các phím tắt dựa trên

$ python3 -mtimeit -s'l=[[1,2,3],[4,5,6], [7], [8,9]]*99;import itertools' 'list(itertools.chain.from_iterable(l))'
20000 loops, best of 5: 10.8 usec per loop
$ python3 -mtimeit -s'l=[[1,2,3],[4,5,6], [7], [8,9]]*99' '[item for sublist in l for item in sublist]'
10000 loops, best of 5: 21.7 usec per loop
$ python3 -mtimeit -s'l=[[1,2,3],[4,5,6], [7], [8,9]]*99' 'sum(l, [])'
1000 loops, best of 5: 258 usec per loop
$ python3 -mtimeit -s'l=[[1,2,3],[4,5,6], [7], [8,9]]*99;from functools import reduce' 'reduce(lambda x,y: x+y,l)'
1000 loops, best of 5: 292 usec per loop
$ python3 --version
Python 3.7.5rc1
3 (bao gồm cả việc sử dụng ngụ ý trong
$ python3 -mtimeit -s'l=[[1,2,3],[4,5,6], [7], [8,9]]*99;import itertools' 'list(itertools.chain.from_iterable(l))'
20000 loops, best of 5: 10.8 usec per loop
$ python3 -mtimeit -s'l=[[1,2,3],[4,5,6], [7], [8,9]]*99' '[item for sublist in l for item in sublist]'
10000 loops, best of 5: 21.7 usec per loop
$ python3 -mtimeit -s'l=[[1,2,3],[4,5,6], [7], [8,9]]*99' 'sum(l, [])'
1000 loops, best of 5: 258 usec per loop
$ python3 -mtimeit -s'l=[[1,2,3],[4,5,6], [7], [8,9]]*99;from functools import reduce' 'reduce(lambda x,y: x+y,l)'
1000 loops, best of 5: 292 usec per loop
$ python3 --version
Python 3.7.5rc1
4), là sự cần thiết,
$ python3 -mtimeit -s'l=[[1,2,3],[4,5,6], [7], [8,9]]*99;import itertools' 'list(itertools.chain.from_iterable(l))'
20000 loops, best of 5: 10.8 usec per loop
$ python3 -mtimeit -s'l=[[1,2,3],[4,5,6], [7], [8,9]]*99' '[item for sublist in l for item in sublist]'
10000 loops, best of 5: 21.7 usec per loop
$ python3 -mtimeit -s'l=[[1,2,3],[4,5,6], [7], [8,9]]*99' 'sum(l, [])'
1000 loops, best of 5: 258 usec per loop
$ python3 -mtimeit -s'l=[[1,2,3],[4,5,6], [7], [8,9]]*99;from functools import reduce' 'reduce(lambda x,y: x+y,l)'
1000 loops, best of 5: 292 usec per loop
$ python3 --version
Python 3.7.5rc1
5 khi có những người bạn L Tất cả các mục trong kết quả trung gian trước đó phải được sao chép (cũng như một vài mục mới được thêm vào cuối). Vì vậy, để đơn giản và không mất tính tổng quát thực tế, hãy nói rằng bạn có những người bạn t của I của tôi: các mục I đầu tiên được sao chép qua lại L-1 lần, các mục thứ hai I L-2 lần, v.v. Tổng số bản sao là tôi lần tổng x cho x từ 1 đến L được loại trừ, tức là,
$ python3 -mtimeit -s'l=[[1,2,3],[4,5,6], [7], [8,9]]*99;import itertools' 'list(itertools.chain.from_iterable(l))'
20000 loops, best of 5: 10.8 usec per loop
$ python3 -mtimeit -s'l=[[1,2,3],[4,5,6], [7], [8,9]]*99' '[item for sublist in l for item in sublist]'
10000 loops, best of 5: 21.7 usec per loop
$ python3 -mtimeit -s'l=[[1,2,3],[4,5,6], [7], [8,9]]*99' 'sum(l, [])'
1000 loops, best of 5: 258 usec per loop
$ python3 -mtimeit -s'l=[[1,2,3],[4,5,6], [7], [8,9]]*99;from functools import reduce' 'reduce(lambda x,y: x+y,l)'
1000 loops, best of 5: 292 usec per loop
$ python3 --version
Python 3.7.5rc1
6.

Danh sách hiểu chỉ tạo ra một danh sách, một lần và sao chép từng mục (từ nơi cư trú ban đầu của nó đến danh sách kết quả) cũng chính xác một lần.

Hướng dẫn python unpack list of lists - giải nén python danh sách danh sách

Đã trả lời ngày 4 tháng 6 năm 2009 lúc 20:37Jun 4, 2009 at 20:37

Alex Martellialex MartelliAlex Martelli

828K163 Huy hiệu vàng1204 Huy hiệu bạc1383 Huy hiệu Đồng163 gold badges1204 silver badges1383 bronze badges

9

Bạn có thể sử dụng

$ python3 -mtimeit -s'l=[[1,2,3],[4,5,6], [7], [8,9]]*99;import itertools' 'list(itertools.chain.from_iterable(l))'
20000 loops, best of 5: 10.8 usec per loop
$ python3 -mtimeit -s'l=[[1,2,3],[4,5,6], [7], [8,9]]*99' '[item for sublist in l for item in sublist]'
10000 loops, best of 5: 21.7 usec per loop
$ python3 -mtimeit -s'l=[[1,2,3],[4,5,6], [7], [8,9]]*99' 'sum(l, [])'
1000 loops, best of 5: 258 usec per loop
$ python3 -mtimeit -s'l=[[1,2,3],[4,5,6], [7], [8,9]]*99;from functools import reduce' 'reduce(lambda x,y: x+y,l)'
1000 loops, best of 5: 292 usec per loop
$ python3 --version
Python 3.7.5rc1
7:

>>> import itertools
>>> list2d = [[1,2,3], [4,5,6], [7], [8,9]]
>>> merged = list(itertools.chain(*list2d))

Hoặc bạn có thể sử dụng

$ python3 -mtimeit -s'l=[[1,2,3],[4,5,6], [7], [8,9]]*99;import itertools' 'list(itertools.chain.from_iterable(l))'
20000 loops, best of 5: 10.8 usec per loop
$ python3 -mtimeit -s'l=[[1,2,3],[4,5,6], [7], [8,9]]*99' '[item for sublist in l for item in sublist]'
10000 loops, best of 5: 21.7 usec per loop
$ python3 -mtimeit -s'l=[[1,2,3],[4,5,6], [7], [8,9]]*99' 'sum(l, [])'
1000 loops, best of 5: 258 usec per loop
$ python3 -mtimeit -s'l=[[1,2,3],[4,5,6], [7], [8,9]]*99;from functools import reduce' 'reduce(lambda x,y: x+y,l)'
1000 loops, best of 5: 292 usec per loop
$ python3 --version
Python 3.7.5rc1
8 không yêu cầu giải nén danh sách với toán tử
$ python3 -mtimeit -s'l=[[1,2,3],[4,5,6], [7], [8,9]]*99;import itertools' 'list(itertools.chain.from_iterable(l))'
20000 loops, best of 5: 10.8 usec per loop
$ python3 -mtimeit -s'l=[[1,2,3],[4,5,6], [7], [8,9]]*99' '[item for sublist in l for item in sublist]'
10000 loops, best of 5: 21.7 usec per loop
$ python3 -mtimeit -s'l=[[1,2,3],[4,5,6], [7], [8,9]]*99' 'sum(l, [])'
1000 loops, best of 5: 258 usec per loop
$ python3 -mtimeit -s'l=[[1,2,3],[4,5,6], [7], [8,9]]*99;from functools import reduce' 'reduce(lambda x,y: x+y,l)'
1000 loops, best of 5: 292 usec per loop
$ python3 --version
Python 3.7.5rc1
9:

>>> import itertools
>>> list2d = [[1,2,3], [4,5,6], [7], [8,9]]
>>> merged = list(itertools.chain.from_iterable(list2d))

Cách tiếp cận này được cho là dễ đọc hơn

>>> xss = [[1, 2, 3], [4, 5, 6], [7], [8, 9]]
>>> sum(xss, [])
[1, 2, 3, 4, 5, 6, 7, 8, 9]
0 và dường như cũng nhanh hơn:

$ python3 -mtimeit -s'l=[[1,2,3],[4,5,6], [7], [8,9]]*99;import itertools' 'list(itertools.chain.from_iterable(l))'
20000 loops, best of 5: 10.8 usec per loop
$ python3 -mtimeit -s'l=[[1,2,3],[4,5,6], [7], [8,9]]*99' '[item for sublist in l for item in sublist]'
10000 loops, best of 5: 21.7 usec per loop
$ python3 -mtimeit -s'l=[[1,2,3],[4,5,6], [7], [8,9]]*99' 'sum(l, [])'
1000 loops, best of 5: 258 usec per loop
$ python3 -mtimeit -s'l=[[1,2,3],[4,5,6], [7], [8,9]]*99;from functools import reduce' 'reduce(lambda x,y: x+y,l)'
1000 loops, best of 5: 292 usec per loop
$ python3 --version
Python 3.7.5rc1

Đã trả lời ngày 4 tháng 6 năm 2009 lúc 21:06Jun 4, 2009 at 21:06

Shawn Chinshawn ChinShawn Chin

81.2K18 Huy hiệu vàng157 Huy hiệu bạc190 Huy hiệu Đồng18 gold badges157 silver badges190 bronze badges

4

Lưu ý từ tác giả: Điều này rất kém hiệu quả. Nhưng vui vẻ, bởi vì monoids là tuyệt vời.: This is very inefficient. But fun, because monoids are awesome.

>>> xss = [[1, 2, 3], [4, 5, 6], [7], [8, 9]]
>>> sum(xss, [])
[1, 2, 3, 4, 5, 6, 7, 8, 9]

$ python3 -mtimeit -s'l=[[1,2,3],[4,5,6], [7], [8,9]]*99;import itertools' 'list(itertools.chain.from_iterable(l))'
20000 loops, best of 5: 10.8 usec per loop
$ python3 -mtimeit -s'l=[[1,2,3],[4,5,6], [7], [8,9]]*99' '[item for sublist in l for item in sublist]'
10000 loops, best of 5: 21.7 usec per loop
$ python3 -mtimeit -s'l=[[1,2,3],[4,5,6], [7], [8,9]]*99' 'sum(l, [])'
1000 loops, best of 5: 258 usec per loop
$ python3 -mtimeit -s'l=[[1,2,3],[4,5,6], [7], [8,9]]*99;from functools import reduce' 'reduce(lambda x,y: x+y,l)'
1000 loops, best of 5: 292 usec per loop
$ python3 --version
Python 3.7.5rc1
4 tổng hợp các phần tử của
>>> xss = [[1, 2, 3], [4, 5, 6], [7], [8, 9]]
>>> sum(xss, [])
[1, 2, 3, 4, 5, 6, 7, 8, 9]
2 và sử dụng đối số thứ hai làm giá trị ban đầu
>>> xss = [[1, 2, 3], [4, 5, 6], [7], [8, 9]]
>>> sum(xss, [])
[1, 2, 3, 4, 5, 6, 7, 8, 9]
3 cho tổng. (Giá trị ban đầu mặc định là
>>> xss = [[1, 2, 3], [4, 5, 6], [7], [8, 9]]
>>> sum(xss, [])
[1, 2, 3, 4, 5, 6, 7, 8, 9]
4, không phải là danh sách.)

Bởi vì bạn đang tổng hợp các danh sách lồng nhau, bạn thực sự nhận được

>>> xss = [[1, 2, 3], [4, 5, 6], [7], [8, 9]]
>>> sum(xss, [])
[1, 2, 3, 4, 5, 6, 7, 8, 9]
5 do kết quả của
>>> xss = [[1, 2, 3], [4, 5, 6], [7], [8, 9]]
>>> sum(xss, [])
[1, 2, 3, 4, 5, 6, 7, 8, 9]
6, tương đương với
>>> xss = [[1, 2, 3], [4, 5, 6], [7], [8, 9]]
>>> sum(xss, [])
[1, 2, 3, 4, 5, 6, 7, 8, 9]
7.

Lưu ý rằng chỉ hoạt động trên danh sách danh sách. Đối với danh sách danh sách danh sách, bạn sẽ cần một giải pháp khác.

Hướng dẫn python unpack list of lists - giải nén python danh sách danh sách

Mateen Ulhaq

22.6K16 Huy hiệu vàng86 Huy hiệu bạc128 Huy hiệu đồng16 gold badges86 silver badges128 bronze badges

Đã trả lời ngày 4 tháng 6 năm 2009 lúc 20:35Jun 4, 2009 at 20:35

Ngân hàng Kenan BankskenanKenan Banks

Huy hiệu vàng 202K3434 gold badges151 silver badges171 bronze badges

5

Tôi đã thử nghiệm hầu hết các giải pháp được đề xuất với perfplot (một dự án thú cưng của tôi, về cơ bản là một trình bao bọc xung quanh

$ python3 -mtimeit -s'l=[[1,2,3],[4,5,6], [7], [8,9]]*99;import itertools' 'list(itertools.chain.from_iterable(l))'
20000 loops, best of 5: 10.8 usec per loop
$ python3 -mtimeit -s'l=[[1,2,3],[4,5,6], [7], [8,9]]*99' '[item for sublist in l for item in sublist]'
10000 loops, best of 5: 21.7 usec per loop
$ python3 -mtimeit -s'l=[[1,2,3],[4,5,6], [7], [8,9]]*99' 'sum(l, [])'
1000 loops, best of 5: 258 usec per loop
$ python3 -mtimeit -s'l=[[1,2,3],[4,5,6], [7], [8,9]]*99;from functools import reduce' 'reduce(lambda x,y: x+y,l)'
1000 loops, best of 5: 292 usec per loop
$ python3 --version
Python 3.7.5rc1
2) và tìm thấy

import functools
import operator
functools.reduce(operator.iconcat, a, [])

Là giải pháp nhanh nhất, cả khi nhiều danh sách nhỏ và một vài danh sách dài được nối. (

>>> xss = [[1, 2, 3], [4, 5, 6], [7], [8, 9]]
>>> sum(xss, [])
[1, 2, 3, 4, 5, 6, 7, 8, 9]
9 cũng nhanh như nhau.)

Một biến thể đơn giản hơn và cũng có thể chấp nhận được là

out = []
for sublist in a:
    out.extend(sublist)

Nếu số lượng người con lớn, điều này thực hiện tồi tệ hơn một chút so với đề xuất trên.

Hướng dẫn python unpack list of lists - giải nén python danh sách danh sách

Hướng dẫn python unpack list of lists - giải nén python danh sách danh sách


Mã để tái tạo lô:

flat_list = []
for sublist in l:
    for item in sublist:
        flat_list.append(item)
0

Đã trả lời ngày 26 tháng 7 năm 2017 lúc 9:38Jul 26, 2017 at 9:38

Nico Schlömernico SchlömerNico Schlömer

49.3K25 Huy hiệu vàng186 Huy hiệu bạc229 Huy hiệu đồng25 gold badges186 silver badges229 bronze badges

7

Sử dụng

import functools
import operator
functools.reduce(operator.iconcat, a, [])
0, thêm danh sách tích lũy
import functools
import operator
functools.reduce(operator.iconcat, a, [])
1 vào danh sách tiếp theo
import functools
import operator
functools.reduce(operator.iconcat, a, [])
2:

flat_list = []
for sublist in l:
    for item in sublist:
        flat_list.append(item)
1

Output:

flat_list = []
for sublist in l:
    for item in sublist:
        flat_list.append(item)
2

Cách sử dụng

import functools
import operator
functools.reduce(operator.iconcat, a, [])
3 nhanh hơn:

flat_list = []
for sublist in l:
    for item in sublist:
        flat_list.append(item)
3

Output:

flat_list = []
for sublist in l:
    for item in sublist:
        flat_list.append(item)
2

Hướng dẫn python unpack list of lists - giải nén python danh sách danh sách

Mateen Ulhaq

22.6K16 Huy hiệu vàng86 Huy hiệu bạc128 Huy hiệu đồng16 gold badges86 silver badges128 bronze badges

Đã trả lời ngày 4 tháng 6 năm 2009 lúc 20:35Jun 4, 2009 at 20:35

Ngân hàng Kenan BankskenanGreg Hewgill

Huy hiệu vàng 202K34178 gold badges1133 silver badges1267 bronze badges

2

Tôi đã thử nghiệm hầu hết các giải pháp được đề xuất với perfplot (một dự án thú cưng của tôi, về cơ bản là một trình bao bọc xung quanh

$ python3 -mtimeit -s'l=[[1,2,3],[4,5,6], [7], [8,9]]*99;import itertools' 'list(itertools.chain.from_iterable(l))'
20000 loops, best of 5: 10.8 usec per loop
$ python3 -mtimeit -s'l=[[1,2,3],[4,5,6], [7], [8,9]]*99' '[item for sublist in l for item in sublist]'
10000 loops, best of 5: 21.7 usec per loop
$ python3 -mtimeit -s'l=[[1,2,3],[4,5,6], [7], [8,9]]*99' 'sum(l, [])'
1000 loops, best of 5: 258 usec per loop
$ python3 -mtimeit -s'l=[[1,2,3],[4,5,6], [7], [8,9]]*99;from functools import reduce' 'reduce(lambda x,y: x+y,l)'
1000 loops, best of 5: 292 usec per loop
$ python3 --version
Python 3.7.5rc1
2) và tìm thấynumbers, strings, nested lists and mixed containers. This can flatten both simple and complicated containers (see also Demo).

Là giải pháp nhanh nhất, cả khi nhiều danh sách nhỏ và một vài danh sách dài được nối. (

>>> xss = [[1, 2, 3], [4, 5, 6], [7], [8, 9]]
>>> sum(xss, [])
[1, 2, 3, 4, 5, 6, 7, 8, 9]
9 cũng nhanh như nhau.)

flat_list = []
for sublist in l:
    for item in sublist:
        flat_list.append(item)
5

Notes:

  • Một biến thể đơn giản hơn và cũng có thể chấp nhận được là
  • Nếu số lượng người con lớn, điều này thực hiện tồi tệ hơn một chút so với đề xuất trên.

Mã để tái tạo lô:

flat_list = []
for sublist in l:
    for item in sublist:
        flat_list.append(item)
6

Đã trả lời ngày 26 tháng 7 năm 2017 lúc 9:38

  • Nico Schlömernico Schlömer
  • 49.3K25 Huy hiệu vàng186 Huy hiệu bạc229 Huy hiệu đồng

Sử dụng

import functools
import operator
functools.reduce(operator.iconcat, a, [])
0, thêm danh sách tích lũy
import functools
import operator
functools.reduce(operator.iconcat, a, [])
1 vào danh sách tiếp theo
import functools
import operator
functools.reduce(operator.iconcat, a, [])
2:Nov 29, 2016 at 4:14

Hướng dẫn python unpack list of lists - giải nén python danh sách danh sách

Cách sử dụng

import functools
import operator
functools.reduce(operator.iconcat, a, [])
3 nhanh hơn:pylang

Greg Hewgillgreg Hewgill11 gold badges123 silver badges112 bronze badges

7

915K178 Huy hiệu vàng1133 Huy hiệu bạc1267 Huy hiệu đồng

flat_list = []
for sublist in l:
    for item in sublist:
        flat_list.append(item)
7

Dưới đây là một cách tiếp cận chung áp dụng cho các số, chuỗi, danh sách lồng nhau và các thùng chứa hỗn hợp. Điều này có thể làm phẳng cả các thùng chứa đơn giản và phức tạp (xem thêm demo).


Mã số

flat_list = []
for sublist in l:
    for item in sublist:
        flat_list.append(item)
8

Trong Python 3,

import functools
import operator
functools.reduce(operator.iconcat, a, [])
4 có thể thay thế
import functools
import operator
functools.reduce(operator.iconcat, a, [])
5

Hướng dẫn python unpack list of lists - giải nén python danh sách danh sách

Trong Python 3.8, các lớp cơ sở trừu tượng được chuyển từ

import functools
import operator
functools.reduce(operator.iconcat, a, [])
6 sang mô -đun
import functools
import operator
functools.reduce(operator.iconcat, a, [])
7.

Thử nghiệm

flat_list = []
for sublist in l:
    for item in sublist:
        flat_list.append(item)
9

1 Tuyên bố miễn trừ trách nhiệm: Tôi là tác giả của thư viện đó

Hướng dẫn python unpack list of lists - giải nén python danh sách danh sách

Mateen Ulhaq

22.6K16 Huy hiệu vàng86 Huy hiệu bạc128 Huy hiệu đồng16 gold badges86 silver badges128 bronze badges

Đã trả lời ngày 26 tháng 11 năm 2016 lúc 0:20Nov 26, 2016 at 0:20

MSEifertMseifertMSeifert

139K33 Huy hiệu vàng321 Huy hiệu bạc337 Huy hiệu đồng33 gold badges321 silver badges337 bronze badges

0

Điều sau đây có vẻ đơn giản nhất đối với tôi:

def flatten(l):
    return [item for sublist in l for item in sublist]
0

Francisco

10,4K6 Huy hiệu vàng34 Huy hiệu bạc43 Huy hiệu đồng6 gold badges34 silver badges43 bronze badges

Đã trả lời ngày 5 tháng 7 năm 2017 lúc 5:14Jul 5, 2017 at 5:14

1

Xem xét cài đặt gói

out = []
for sublist in a:
    out.extend(sublist)
6.

def flatten(l):
    return [item for sublist in l for item in sublist]
1

Nó vận chuyển với một triển khai cho

out = []
for sublist in a:
    out.extend(sublist)
7 (nguồn, từ các công thức nấu ăn của ITERTOOLS):

def flatten(l):
    return [item for sublist in l for item in sublist]
2

Lưu ý: Như đã đề cập trong các tài liệu,

out = []
for sublist in a:
    out.extend(sublist)
7 yêu cầu một danh sách các danh sách. Xem bên dưới về việc làm phẳng nhiều đầu vào không đều.


Kể từ phiên bản 2.4, bạn có thể làm phẳng các phép lặp phức tạp hơn, lồng nhau với

out = []
for sublist in a:
    out.extend(sublist)
9 (nguồn, được đóng góp bởi Abarnet).

def flatten(l):
    return [item for sublist in l for item in sublist]
3

Đã trả lời ngày 2 tháng 12 năm 2016 lúc 18:35Dec 2, 2016 at 18:35

Hướng dẫn python unpack list of lists - giải nén python danh sách danh sách

Pylangpylangpylang

37K11 Huy hiệu vàng123 Huy hiệu bạc112 Huy hiệu đồng11 gold badges123 silver badges112 bronze badges

3

Lý do chức năng của bạn không hoạt động là vì phần mở rộng mở rộng một mảng tại chỗ và không trả lại nó. Bạn vẫn có thể trả lại X từ Lambda, sử dụng một cái gì đó như thế này:

def flatten(l):
    return [item for sublist in l for item in sublist]
4

Lưu ý: Mở rộng hiệu quả hơn + trên danh sách.

Đã trả lời ngày 4 tháng 6 năm 2009 lúc 20:47Jun 4, 2009 at 20:47

Igor Krivokonigor KrivokonIgor Krivokon

10.1k1 Huy hiệu vàng36 Huy hiệu bạc41 Huy hiệu đồng1 gold badge36 silver badges41 bronze badges

2

flat_list = []
for sublist in l:
    for item in sublist:
        flat_list.append(item)
00 sẽ hoạt động cho các danh sách lồng nhau ngay cả khi chúng làm tổ sâu hơn ví dụ.

def flatten(l):
    return [item for sublist in l for item in sublist]
5

Result:

def flatten(l):
    return [item for sublist in l for item in sublist]
6

Cái này nhanh hơn 18 lần so với dấu gạch dưới ._. Flatten:

def flatten(l):
    return [item for sublist in l for item in sublist]
7

Francisco

10,4K6 Huy hiệu vàng34 Huy hiệu bạc43 Huy hiệu đồng6 gold badges34 silver badges43 bronze badges

Đã trả lời ngày 5 tháng 7 năm 2017 lúc 5:14Feb 1, 2018 at 18:22

Hướng dẫn python unpack list of lists - giải nén python danh sách danh sách

EL_DONEL_DONEL_DON

Xem xét cài đặt gói

out = []
for sublist in a:
    out.extend(sublist)
6.1 gold badge17 silver badges33 bronze badges

0

Nó vận chuyển với một triển khai cho

out = []
for sublist in a:
    out.extend(sublist)
7 (nguồn, từ các công thức nấu ăn của ITERTOOLS):

def flatten(l):
    return [item for sublist in l for item in sublist]
8

Lưu ý: Như đã đề cập trong các tài liệu,

out = []
for sublist in a:
    out.extend(sublist)
7 yêu cầu một danh sách các danh sách. Xem bên dưới về việc làm phẳng nhiều đầu vào không đều.

Kể từ phiên bản 2.4, bạn có thể làm phẳng các phép lặp phức tạp hơn, lồng nhau với
out = []
for sublist in a:
    out.extend(sublist)
9 (nguồn, được đóng góp bởi Abarnet).

Đã trả lời ngày 2 tháng 12 năm 2016 lúc 18:35

PylangpylangDec 9, 2021 at 9:15

Hướng dẫn python unpack list of lists - giải nén python danh sách danh sách

dtlam26dtlam26dtlam26

37K11 Huy hiệu vàng123 Huy hiệu bạc112 Huy hiệu đồng9 silver badges19 bronze badges

3

Lý do chức năng của bạn không hoạt động là vì phần mở rộng mở rộng một mảng tại chỗ và không trả lại nó. Bạn vẫn có thể trả lại X từ Lambda, sử dụng một cái gì đó như thế này:

$ python -mtimeit -s'l=[[1,2,3],[4,5,6], [7], [8,9]]*99' '[item for sublist in l for item in sublist]'
10000 loops, best of 3: 143 usec per loop
$ python -mtimeit -s'l=[[1,2,3],[4,5,6], [7], [8,9]]*99' 'sum(l, [])'
1000 loops, best of 3: 969 usec per loop
$ python -mtimeit -s'l=[[1,2,3],[4,5,6], [7], [8,9]]*99' 'reduce(lambda x,y: x+y,l)'
1000 loops, best of 3: 1.1 msec per loop
0

Lưu ý: Mở rộng hiệu quả hơn + trên danh sách.

Hướng dẫn python unpack list of lists - giải nén python danh sách danh sách

Đã trả lời ngày 4 tháng 6 năm 2009 lúc 20:47Jul 17, 2016 at 12:57

Igor Krivokonigor Krivokonmdh

10.1k1 Huy hiệu vàng36 Huy hiệu bạc41 Huy hiệu đồng5 gold badges26 silver badges33 bronze badges

0

flat_list = []
for sublist in l:
    for item in sublist:
        flat_list.append(item)
00 sẽ hoạt động cho các danh sách lồng nhau ngay cả khi chúng làm tổ sâu hơn ví dụ.

$ python -mtimeit -s'l=[[1,2,3],[4,5,6], [7], [8,9]]*99' '[item for sublist in l for item in sublist]'
10000 loops, best of 3: 143 usec per loop
$ python -mtimeit -s'l=[[1,2,3],[4,5,6], [7], [8,9]]*99' 'sum(l, [])'
1000 loops, best of 3: 969 usec per loop
$ python -mtimeit -s'l=[[1,2,3],[4,5,6], [7], [8,9]]*99' 'reduce(lambda x,y: x+y,l)'
1000 loops, best of 3: 1.1 msec per loop
1

Performance:

$ python -mtimeit -s'l=[[1,2,3],[4,5,6], [7], [8,9]]*99' '[item for sublist in l for item in sublist]'
10000 loops, best of 3: 143 usec per loop
$ python -mtimeit -s'l=[[1,2,3],[4,5,6], [7], [8,9]]*99' 'sum(l, [])'
1000 loops, best of 3: 969 usec per loop
$ python -mtimeit -s'l=[[1,2,3],[4,5,6], [7], [8,9]]*99' 'reduce(lambda x,y: x+y,l)'
1000 loops, best of 3: 1.1 msec per loop
2

Output:

Hướng dẫn python unpack list of lists - giải nén python danh sách danh sách

Hướng dẫn python unpack list of lists - giải nén python danh sách danh sách

def flatten(l):
    return [item for sublist in l for item in sublist]
5Jan 25, 2020 at 21:08

Hướng dẫn python unpack list of lists - giải nén python danh sách danh sách

Cái này nhanh hơn 18 lần so với dấu gạch dưới ._. Flatten:kederrac

Đã trả lời ngày 1 tháng 2 năm 2018 lúc 18:226 gold badges29 silver badges54 bronze badges

0

1.3761 Huy hiệu vàng17 Huy hiệu bạc33 Huy hiệu đồng

$ python -mtimeit -s'l=[[1,2,3],[4,5,6], [7], [8,9]]*99' '[item for sublist in l for item in sublist]'
10000 loops, best of 3: 143 usec per loop
$ python -mtimeit -s'l=[[1,2,3],[4,5,6], [7], [8,9]]*99' 'sum(l, [])'
1000 loops, best of 3: 969 usec per loop
$ python -mtimeit -s'l=[[1,2,3],[4,5,6], [7], [8,9]]*99' 'reduce(lambda x,y: x+y,l)'
1000 loops, best of 3: 1.1 msec per loop
3

Theo danh sách của bạn

flat_list = []
for sublist in l:
    for item in sublist:
        flat_list.append(item)
01 là 1 cấp danh sách, chúng tôi chỉ có thể sử dụng
flat_list = []
for sublist in l:
    for item in sublist:
        flat_list.append(item)
02 mà không cần sử dụng bất kỳ thư viện nào
: this is a generator, and you typically want to enclose it in an iterable builder like
flat_list = []
for sublist in l:
    for item in sublist:
        flat_list.append(item)
07 or
flat_list = []
for sublist in l:
    for item in sublist:
        flat_list.append(item)
08 or use it in a
flat_list = []
for sublist in l:
    for item in sublist:
        flat_list.append(item)
09 loop.

Để mở rộng lợi thế của phương pháp này khi có một tuple hoặc số tồn tại bên trong. Chỉ cần thêm chức năng ánh xạ cho từng phần tử bằng

flat_list = []
for sublist in l:
    for item in sublist:
        flat_list.append(item)
03 vào danh sách

  • def flatten(l):
        return [item for sublist in l for item in sublist]
    
    9
  • Ở đây, có một lời giải thích rõ ràng về nhược điểm về bộ nhớ cho phương pháp này. Nói tóm lại, nó tạo ra các đối tượng danh sách, nên tránh :(
  • Đã trả lời ngày 9 tháng 12 năm 2021 lúc 9:15
  • 1.2689 huy hiệu bạc19 huy hiệu đồng
  • Người ta cũng có thể sử dụng căn hộ của Numpy:
  • Nó chỉ hoạt động khi những người con có kích thước giống hệt nhau.

Đã trả lời ngày 17 tháng 7 năm 2016 lúc 12:57

$ python -mtimeit -s'l=[[1,2,3],[4,5,6], [7], [8,9]]*99' '[item for sublist in l for item in sublist]'
10000 loops, best of 3: 143 usec per loop
$ python -mtimeit -s'l=[[1,2,3],[4,5,6], [7], [8,9]]*99' 'sum(l, [])'
1000 loops, best of 3: 969 usec per loop
$ python -mtimeit -s'l=[[1,2,3],[4,5,6], [7], [8,9]]*99' 'reduce(lambda x,y: x+y,l)'
1000 loops, best of 3: 1.1 msec per loop
4

Hướng dẫn python unpack list of lists - giải nén python danh sách danh sách

mdhmdhAug 8, 2020 at 14:52

5.0575 Huy hiệu vàng26 Huy hiệu bạc33 Huy hiệu đồngmmj

Bạn có thể sử dụng phương pháp

import functools
import operator
functools.reduce(operator.iconcat, a, [])
9
flat_list = []
for sublist in l:
    for item in sublist:
        flat_list.append(item)
05. Nó cho thấy là nhanh nhất:2 gold badges41 silver badges49 bronze badges

3

Đã trả lời ngày 25 tháng 1 năm 2020 lúc 21:08

$ python -mtimeit -s'l=[[1,2,3],[4,5,6], [7], [8,9]]*99' '[item for sublist in l for item in sublist]'
10000 loops, best of 3: 143 usec per loop
$ python -mtimeit -s'l=[[1,2,3],[4,5,6], [7], [8,9]]*99' 'sum(l, [])'
1000 loops, best of 3: 969 usec per loop
$ python -mtimeit -s'l=[[1,2,3],[4,5,6], [7], [8,9]]*99' 'reduce(lambda x,y: x+y,l)'
1000 loops, best of 3: 1.1 msec per loop
5

Kederrackederrac

Hướng dẫn python unpack list of lists - giải nén python danh sách danh sách

16.4K6 Huy hiệu vàng29 Huy hiệu bạc54 Huy hiệu đồngOct 27, 2016 at 3:24

Hướng dẫn python unpack list of lists - giải nén python danh sách danh sách

Có một số câu trả lời với cùng một sơ đồ nối lại đệ quy như dưới đây, nhưng không có câu trả lời nào sử dụng

flat_list = []
for sublist in l:
    for item in sublist:
        flat_list.append(item)
06, điều này làm cho giải pháp mạnh mẽ và pythonic hơn.mkultra

Cách sử dụng: Đây là một trình tạo và bạn thường muốn gửi nó trong một trình xây dựng có thể lặp lại như

flat_list = []
for sublist in l:
    for item in sublist:
        flat_list.append(item)
07 hoặc
flat_list = []
for sublist in l:
    for item in sublist:
        flat_list.append(item)
08 hoặc sử dụng nó trong vòng lặp
flat_list = []
for sublist in l:
    for item in sublist:
        flat_list.append(item)
09.3 silver badges9 bronze badges

2

Ưu điểm của giải pháp này là:: Below applies to Python 3.3+ because it uses

flat_list = []
for sublist in l:
    for item in sublist:
        flat_list.append(item)
12.
flat_list = []
for sublist in l:
    for item in sublist:
        flat_list.append(item)
13 is also a third-party package, though it is stable. Alternately, you could use
flat_list = []
for sublist in l:
    for item in sublist:
        flat_list.append(item)
14.


Hoạt động với bất kỳ loại khác (thậm chí là tương lai!)

hoạt động với bất kỳ sự kết hợp và độ sâu của làm tổ

$ python -mtimeit -s'l=[[1,2,3],[4,5,6], [7], [8,9]]*99' '[item for sublist in l for item in sublist]'
10000 loops, best of 3: 143 usec per loop
$ python -mtimeit -s'l=[[1,2,3],[4,5,6], [7], [8,9]]*99' 'sum(l, [])'
1000 loops, best of 3: 969 usec per loop
$ python -mtimeit -s'l=[[1,2,3],[4,5,6], [7], [8,9]]*99' 'reduce(lambda x,y: x+y,l)'
1000 loops, best of 3: 1.1 msec per loop
6

Cũng hoạt động nếu cấp cao nhất chứa các mặt hàng trần

  • Không có sự phụ thuộc
  • Nhanh chóng và hiệu quả (bạn có thể làm phẳng một phần được lồng nhau một phần, mà không lãng phí thời gian cho phần còn lại mà bạn không cần)
  • đa năng (bạn có thể sử dụng nó để xây dựng một sự lựa chọn của bạn hoặc trong một vòng lặp)

Bạn có thể khắc phục điều này như sau:

$ python -mtimeit -s'l=[[1,2,3],[4,5,6], [7], [8,9]]*99' '[item for sublist in l for item in sublist]'
10000 loops, best of 3: 143 usec per loop
$ python -mtimeit -s'l=[[1,2,3],[4,5,6], [7], [8,9]]*99' 'sum(l, [])'
1000 loops, best of 3: 969 usec per loop
$ python -mtimeit -s'l=[[1,2,3],[4,5,6], [7], [8,9]]*99' 'reduce(lambda x,y: x+y,l)'
1000 loops, best of 3: 1.1 msec per loop
7

Ở đây, bạn kiểm tra xem phần tử phụ (1) có thể sử dụng được với

flat_list = []
for sublist in l:
    for item in sublist:
        flat_list.append(item)
22, ABC từ
flat_list = []
for sublist in l:
    for item in sublist:
        flat_list.append(item)
23, nhưng cũng muốn đảm bảo rằng (2) phần tử không giống như "giống như chuỗi".

Đã trả lời ngày 1 tháng 2 năm 2018 lúc 18:33Feb 1, 2018 at 18:33

Hướng dẫn python unpack list of lists - giải nén python danh sách danh sách

Brad Solomonbrad SolomonBrad Solomon

36K29 Huy hiệu vàng137 Huy hiệu bạc219 Huy hiệu đồng29 gold badges137 silver badges219 bronze badges

1

$ python -mtimeit -s'l=[[1,2,3],[4,5,6], [7], [8,9]]*99' '[item for sublist in l for item in sublist]'
10000 loops, best of 3: 143 usec per loop
$ python -mtimeit -s'l=[[1,2,3],[4,5,6], [7], [8,9]]*99' 'sum(l, [])'
1000 loops, best of 3: 969 usec per loop
$ python -mtimeit -s'l=[[1,2,3],[4,5,6], [7], [8,9]]*99' 'reduce(lambda x,y: x+y,l)'
1000 loops, best of 3: 1.1 msec per loop
8

Đã trả lời ngày 8 tháng 8 năm 2017 lúc 14:59Aug 8, 2017 at 14:59

Đất menenglealuze

1.40511 Huy hiệu bạc17 Huy hiệu đồng11 silver badges17 bronze badges

1

Tôi muốn một giải pháp có thể xử lý nhiều tổ (ví dụ

flat_list = []
for sublist in l:
    for item in sublist:
        flat_list.append(item)
24), nhưng cũng sẽ không được đệ quy (tôi đã có một mức độ lớn và tôi bị lỗi đệ quy.

Đây là những gì tôi nghĩ ra:

$ python -mtimeit -s'l=[[1,2,3],[4,5,6], [7], [8,9]]*99' '[item for sublist in l for item in sublist]'
10000 loops, best of 3: 143 usec per loop
$ python -mtimeit -s'l=[[1,2,3],[4,5,6], [7], [8,9]]*99' 'sum(l, [])'
1000 loops, best of 3: 969 usec per loop
$ python -mtimeit -s'l=[[1,2,3],[4,5,6], [7], [8,9]]*99' 'reduce(lambda x,y: x+y,l)'
1000 loops, best of 3: 1.1 msec per loop
9

và các bài kiểm tra:

>>> import itertools
>>> list2d = [[1,2,3], [4,5,6], [7], [8,9]]
>>> merged = list(itertools.chain(*list2d))
0

Đã trả lời ngày 7 tháng 10 năm 2021 lúc 17:38Oct 7, 2021 at 17:38

Đây có thể không phải là cách hiệu quả nhất, nhưng tôi nghĩ sẽ đặt một lớp một (thực sự là hai lớp). Cả hai phiên bản sẽ hoạt động trên các danh sách lồng phân cấp tùy ý và khai thác các tính năng ngôn ngữ (Python & NBSP; 3.5) và đệ quy.

>>> import itertools
>>> list2d = [[1,2,3], [4,5,6], [7], [8,9]]
>>> merged = list(itertools.chain(*list2d))
1

Đầu ra là

>>> import itertools
>>> list2d = [[1,2,3], [4,5,6], [7], [8,9]]
>>> merged = list(itertools.chain(*list2d))
2

Điều này hoạt động theo cách sâu sắc đầu tiên. Việc đệ quy đi xuống cho đến khi tìm thấy một yếu tố không danh sách, sau đó mở rộng biến cục bộ

flat_list = []
for sublist in l:
    for item in sublist:
        flat_list.append(item)
25 và sau đó quay lại cho cha mẹ. Bất cứ khi nào
flat_list = []
for sublist in l:
    for item in sublist:
        flat_list.append(item)
25 được trả về, nó được mở rộng cho
flat_list = []
for sublist in l:
    for item in sublist:
        flat_list.append(item)
25 của cha mẹ trong danh sách hiểu. Do đó, tại gốc, một danh sách phẳng được trả về.

Phần trên tạo ra một số danh sách địa phương và trả về chúng được sử dụng để mở rộng danh sách của cha mẹ. Tôi nghĩ rằng cách xung quanh cho điều này có thể là tạo ra một gloab125, như dưới đây.

>>> import itertools
>>> list2d = [[1,2,3], [4,5,6], [7], [8,9]]
>>> merged = list(itertools.chain(*list2d))
3

Đầu ra một lần nữa

>>> import itertools
>>> list2d = [[1,2,3], [4,5,6], [7], [8,9]]
>>> merged = list(itertools.chain(*list2d))
2

Mặc dù tôi không chắc chắn vào thời điểm này về hiệu quả.

Hướng dẫn python unpack list of lists - giải nén python danh sách danh sách

Đã trả lời ngày 16 tháng 5 năm 2018 lúc 9:41May 16, 2018 at 9:41

Phoxisphoxisphoxis

58K14 Huy hiệu vàng80 Huy hiệu bạc114 Huy hiệu đồng14 gold badges80 silver badges114 bronze badges

1

Một cách tiếp cận khác thường khác hoạt động cho các danh sách các số nguyên không đồng nhất và đồng nhất:

>>> import itertools
>>> list2d = [[1,2,3], [4,5,6], [7], [8,9]]
>>> merged = list(itertools.chain(*list2d))
5

Đã trả lời ngày 9 tháng 1 năm 2018 lúc 14:34Jan 9, 2018 at 14:34

Hướng dẫn python unpack list of lists - giải nén python danh sách danh sách

Tharndttharndttharndt

1273 Huy hiệu bạc9 Huy hiệu Đồng3 silver badges9 bronze badges

6

Một chức năng không nhận được để làm phẳng danh sách danh sách của bất kỳ độ sâu nào:

>>> import itertools
>>> list2d = [[1,2,3], [4,5,6], [7], [8,9]]
>>> merged = list(itertools.chain(*list2d))
6

Đã trả lời ngày 9 tháng 12 năm 2021 lúc 6:10Dec 9, 2021 at 6:10

Không phải là một lớp lót, nhưng nhìn thấy tất cả các câu trả lời ở đây, tôi đoán danh sách dài này đã bỏ lỡ một số mẫu phù hợp, vì vậy đây là :)

Hai phương pháp có thể không hiệu quả, nhưng dù sao, nó rất dễ đọc (ít nhất là với tôi; có lẽ tôi bị hỏng bởi lập trình chức năng):

>>> import itertools
>>> list2d = [[1,2,3], [4,5,6], [7], [8,9]]
>>> merged = list(itertools.chain(*list2d))
7

Phiên bản thứ hai xem xét danh sách danh sách danh sách ... bất kể việc làm tổ:

>>> import itertools
>>> list2d = [[1,2,3], [4,5,6], [7], [8,9]]
>>> merged = list(itertools.chain(*list2d))
8

Hướng dẫn python unpack list of lists - giải nén python danh sách danh sách

Đã trả lời ngày 14 tháng 3 lúc 13:06Mar 14 at 13:06

Hướng dẫn python unpack list of lists - giải nén python danh sách danh sách

Nếu bạn muốn bất thường mọi thứ và giữ một danh sách các yếu tố riêng biệt, bạn cũng có thể sử dụng điều này.

>>> import itertools
>>> list2d = [[1,2,3], [4,5,6], [7], [8,9]]
>>> merged = list(itertools.chain(*list2d))
9

Đã trả lời ngày 25 tháng 7 lúc 9:26Jul 25 at 9:26

Hướng dẫn python unpack list of lists - giải nén python danh sách danh sách

Đối với một danh sách chứa nhiều danh sách ở đây, một giải pháp đệ quy phù hợp với tôi và tôi hy vọng là chính xác:

>>> import itertools
>>> list2d = [[1,2,3], [4,5,6], [7], [8,9]]
>>> merged = list(itertools.chain.from_iterable(list2d))
0

Output:

>>> import itertools
>>> list2d = [[1,2,3], [4,5,6], [7], [8,9]]
>>> merged = list(itertools.chain.from_iterable(list2d))
1

Đã trả lời ngày 10 tháng 8 lúc 10:05Aug 10 at 10:05

Hướng dẫn python unpack list of lists - giải nén python danh sách danh sách

X0-user-0XX0-user-0XX0-user-0X

5994 Huy hiệu bạc18 Huy hiệu đồng4 silver badges18 bronze badges

Nếu bạn có một mảng numpy

flat_list = []
for sublist in l:
    for item in sublist:
        flat_list.append(item)
29:

>>> import itertools
>>> list2d = [[1,2,3], [4,5,6], [7], [8,9]]
>>> merged = list(itertools.chain.from_iterable(list2d))
2

produces:

>>> import itertools
>>> list2d = [[1,2,3], [4,5,6], [7], [8,9]]
>>> merged = list(itertools.chain.from_iterable(list2d))
3

flat_list = []
for sublist in l:
    for item in sublist:
        flat_list.append(item)
30 cũng chấp nhận các tham số khác:

  • flat_list = []
    for sublist in l:
        for item in sublist:
            flat_list.append(item)
    
    31:
  • flat_list = []
    for sublist in l:
        for item in sublist:
            flat_list.append(item)
    
    32
  • flat_list = []
    for sublist in l:
        for item in sublist:
            flat_list.append(item)
    
    33
  • flat_list = []
    for sublist in l:
        for item in sublist:
            flat_list.append(item)
    
    34

Thông tin chi tiết về các tham số có sẵn ở đây.

Đã trả lời ngày 14 tháng 10 lúc 13:19Oct 14 at 13:19

Vasantha Ganeshvasantha GaneshVasantha Ganesh

4.1703 Huy hiệu vàng22 Huy hiệu bạc33 Huy hiệu đồng3 gold badges22 silver badges33 bronze badges

Tôi sẽ đề nghị sử dụng các máy phát điện với tuyên bố năng suất và năng suất từ. Đây là một ví dụ:yield statement and yield from. Here's an example:

>>> import itertools
>>> list2d = [[1,2,3], [4,5,6], [7], [8,9]]
>>> merged = list(itertools.chain.from_iterable(list2d))
4

Đã trả lời ngày 15 tháng 5 lúc 17:07May 15 at 17:07

VovavovaVova

2.6332 huy hiệu vàng11 Huy hiệu bạc18 Huy hiệu đồng2 gold badges11 silver badges18 bronze badges

Nếu tôi muốn thêm một cái gì đó vào câu trả lời tuyệt vời trước đây, thì đây là chức năng

out = []
for sublist in a:
    out.extend(sublist)
7 đệ quy của tôi có thể làm phẳng không chỉ danh sách lồng nhau, mà còn bất kỳ container nào được đưa ra hoặc bất kỳ đối tượng nào có thể loại bỏ các mục. Điều này cũng hoạt động cho bất kỳ độ sâu nào của việc làm tổ và nó là một trình lặp lười biếng mang lại các vật phẩm theo yêu cầu:

>>> import itertools
>>> list2d = [[1,2,3], [4,5,6], [7], [8,9]]
>>> merged = list(itertools.chain.from_iterable(list2d))
5

Bằng cách này, bạn có thể loại trừ các loại bạn không muốn bị san phẳng, như

flat_list = []
for sublist in l:
    for item in sublist:
        flat_list.append(item)
19 hoặc những gì khác.

Ý tưởng là nếu một đối tượng có thể vượt qua

flat_list = []
for sublist in l:
    for item in sublist:
        flat_list.append(item)
37, nó đã sẵn sàng để mang lại các mục. Vì vậy, có thể có các biểu thức thậm chí có thể có các biểu thức như một mục.

Ai đó có thể tranh luận: Tại sao bạn viết điều này chung chung khi OP không yêu cầu nó? OK bạn nói đúng. Tôi chỉ cảm thấy như điều này có thể giúp ai đó (giống như nó đã làm cho bản thân tôi).

Trường hợp kiểm tra:

>>> import itertools
>>> list2d = [[1,2,3], [4,5,6], [7], [8,9]]
>>> merged = list(itertools.chain.from_iterable(list2d))
6

Output:

>>> import itertools
>>> list2d = [[1,2,3], [4,5,6], [7], [8,9]]
>>> merged = list(itertools.chain.from_iterable(list2d))
7

Hướng dẫn python unpack list of lists - giải nén python danh sách danh sách

Đã trả lời ngày 11 tháng 1 lúc 15:56Jan 11 at 15:56

Hướng dẫn python unpack list of lists - giải nén python danh sách danh sách

S.BS.BS.B

10,2K7 Huy hiệu vàng19 Huy hiệu bạc41 Huy hiệu đồng7 gold badges19 silver badges41 bronze badges

Cách đơn giản nhất để làm trong Python mà không có bất kỳ thư viện nào

Chức năng này cũng sẽ hoạt động cho danh sách đa chiều cũng

Sử dụng đệ quy Chúng ta có thể đạt được bất kỳ sự kết hợp nào của danh sách bên trong danh sách, chúng ta có thể làm phẳng nó mà không cần sử dụng bất kỳ thư viện nào.

>>> import itertools
>>> list2d = [[1,2,3], [4,5,6], [7], [8,9]]
>>> merged = list(itertools.chain.from_iterable(list2d))
8

Đã trả lời ngày 10 tháng 8 lúc 10:50Aug 10 at 10:50

Hướng dẫn python unpack list of lists - giải nén python danh sách danh sách

DevildevilDevil

88811 Huy hiệu bạc12 Huy hiệu đồng11 silver badges12 bronze badges

Xem xét danh sách chỉ có số nguyên:

>>> import itertools
>>> list2d = [[1,2,3], [4,5,6], [7], [8,9]]
>>> merged = list(itertools.chain.from_iterable(list2d))
9

Đã trả lời ngày 2 tháng 4 lúc 15:31Apr 2 at 15:31

BhushandbhushandBhushanD

731 Huy hiệu bạc5 Huy hiệu đồng1 silver badge5 bronze badges

Làm cách nào để làm phẳng danh sách các danh sách?

Làm phẳng một danh sách các danh sách đòi hỏi phải chuyển đổi danh sách 2D thành danh sách 1D bằng cách không tổ chức mỗi mục danh sách được lưu trữ trong danh sách các danh sách - tức là, chuyển đổi [[1, 2, 3], [4, 5, 6], [7, 8, 9]] vào [1, 2, 3, 4, 5, 6, 7, 8, 9].converting a 2D list into a 1D list by un-nesting each list item stored in the list of lists - i.e., converting [[1, 2, 3], [4, 5, 6], [7, 8, 9]] into [1, 2, 3, 4, 5, 6, 7, 8, 9] .

Làm thế nào để bạn lập một danh sách các danh sách trong một danh sách Python?

Có ba cách để làm phẳng danh sách Python:..
Sử dụng danh sách hiểu biết ..
Sử dụng một vòng lặp cho vòng lặp ..
Sử dụng itertools.Chuỗi () Phương thức ..

Làm thế nào để bạn làm phẳng một danh sách bất thường trong Python?

Đây là một chức năng đơn giản làm phẳng danh sách độ sâu tùy ý ...
Trong tất cả các đề xuất trên trang này, đây là trang duy nhất làm phẳng danh sách này l = ([[chr (i), chr (i-32)] cho i trong xrange (ord ('a'), ord ('z') +1)] + phạm vi (0,9)) trong snap khi tôi thực hiện danh sách này (Flatten (l)).....
Điều này cũng làm phẳng từ điển ..

Làm thế nào để bạn làm phẳng một danh sách lồng nhau trong Python?

Cung cấp hai đối số cho phương thức SUM (): my_list và một danh sách trống (tức là []).sum () kết hợp my_list và [] để tạo một danh sách dẹt.. sum() combines my_list and [ ] to produce a flattened list.