Hướng dẫn python list of tuples to multiple lists - python danh sách các bộ giá trị đến nhiều danh sách

140

Mới! Lưu câu hỏi hoặc câu trả lời và sắp xếp nội dung yêu thích của bạn. Tìm hiểu thêm.
Learn more.

Giả sử tôi có một danh sách các bộ dữ liệu và tôi muốn chuyển đổi thành nhiều danh sách.

Ví dụ, danh sách các bộ dữ

[(1,2),(3,4),(5,6),]

Có bất kỳ chức năng tích hợp nào trong Python chuyển đổi nó thành:

[1,3,5],[2,4,6]

Đây có thể là một chương trình đơn giản. Nhưng tôi chỉ tò mò về sự tồn tại của chức năng tích hợp như vậy trong Python.

Hướng dẫn python list of tuples to multiple lists - python danh sách các bộ giá trị đến nhiều danh sách

Martineau

Huy hiệu vàng 116K2525 gold badges160 silver badges285 bronze badges

Đã hỏi ngày 10 tháng 11 năm 2011 lúc 15:02Nov 10, 2011 at 15:02

xiaohan2012xiaohan2012xiaohan2012

9.34620 Huy hiệu vàng64 Huy hiệu bạc99 Huy hiệu Đồng20 gold badges64 silver badges99 bronze badges

Chức năng tích hợp

[1,3,5],[2,4,6]
5 sẽ gần như làm những gì bạn muốn:

>>> list(zip(*[(1, 2), (3, 4), (5, 6)]))
[(1, 3, 5), (2, 4, 6)]

Sự khác biệt duy nhất là bạn nhận được bộ dữ liệu thay vì danh sách. Bạn có thể chuyển đổi chúng thành danh sách bằng cách sử dụng

list(map(list, zip(*[(1, 2), (3, 4), (5, 6)])))

Đã trả lời ngày 10 tháng 11 năm 2011 lúc 15:03Nov 10, 2011 at 15:03

Sven Marnachsven MarnachSven Marnach

545K114 Huy hiệu vàng915 Huy hiệu bạc817 Huy hiệu đồng114 gold badges915 silver badges817 bronze badges

3

Từ các tài liệu Python:

Zip () kết hợp với toán tử * có thể được sử dụng để giải nén danh sách:

Ví dụ cụ thể:

>>> zip((1,3,5),(2,4,6))
[(1, 2), (3, 4), (5, 6)]
>>> zip(*[(1, 2), (3, 4), (5, 6)])
[(1, 3, 5), (2, 4, 6)]

Hoặc, nếu bạn thực sự muốn danh sách:

>>> map(list, zip(*[(1, 2), (3, 4), (5, 6)]))
[[1, 3, 5], [2, 4, 6]]

Đã trả lời ngày 10 tháng 11 năm 2011 lúc 15:04Nov 10, 2011 at 15:04

Use:

a = [(1,2),(3,4),(5,6),]    
b = zip(*a)
>>> [(1, 3, 5), (2, 4, 6)]

Đã trả lời ngày 10 tháng 11 năm 2011 lúc 15:04Nov 10, 2011 at 15:04

Artsiom Rudzenkaartsiom RudzenkaArtsiom Rudzenka

27.1k4 Huy hiệu vàng33 Huy hiệu bạc51 Huy hiệu Đồng4 gold badges33 silver badges51 bronze badges

Franklsf95 đi cho hiệu suất trong câu trả lời của anh ấy và chọn cho

[1,3,5],[2,4,6]
6, nhưng chúng không tối ưu.

Thêm toàn bộ danh sách, tôi đã kết thúc với những điều sau:

def t1(zs):
    xs, ys = zip(*zs)
    return xs, ys

def t2(zs):
    xs, ys = [], []
    for x, y in zs:
        xs.append(x)
        ys.append(y)
    return xs, ys

def t3(zs):
    xs, ys = [x for x, y in zs], [y for x, y in zs]
    return xs, ys

if __name__ == '__main__':
    from timeit import timeit
    setup_string='''\
N = 2000000
xs = list(range(1, N))
ys = list(range(N+1, N*2))
zs = list(zip(xs, ys))
from __main__ import t1, t2, t3
'''
    print(f'zip:\t\t{timeit('t1(zs)', setup=setup_string, number=1000)}')
    print(f'append:\t\t{timeit('t2(zs)', setup=setup_string, number=1000)}')
    print(f'list comp:\t{timeit('t3(zs)', setup=setup_string, number=1000)}')

Điều này đã cho kết quả:

zip:            122.11585397789766
append:         356.44876132614047
list comp:      144.637765085659

Vì vậy, nếu bạn là người sau hiệu suất, có lẽ bạn nên sử dụng

[1,3,5],[2,4,6]
5 mặc dù danh sách toàn diện không quá xa. Hiệu suất của
[1,3,5],[2,4,6]
8 thực sự khá kém so với so sánh.

Đã trả lời ngày 18 tháng 1 năm 2018 lúc 23:08Jan 18, 2018 at 23:08

BaldrickkbaldrickkBaldrickk

4.1711 Huy hiệu vàng15 Huy hiệu bạc26 Huy hiệu đồng1 gold badge15 silver badges26 bronze badges

Mặc dù

[1,3,5],[2,4,6]
9 là Pythonic hơn, mã sau đây có hiệu suất tốt hơn nhiều:

xs, ys = [], []
for x, y in zs:
    xs.append(x)
    ys.append(y)

Ngoài ra, khi danh sách ban đầu

>>> list(zip(*[(1, 2), (3, 4), (5, 6)]))
[(1, 3, 5), (2, 4, 6)]
0 trống,
[1,3,5],[2,4,6]
9 sẽ tăng, nhưng mã này có thể xử lý đúng.

Tôi vừa chạy một thử nghiệm nhanh, và đây là kết quả:

[1,3,5],[2,4,6]
0

Chạy nó nhiều lần,

[1,3,5],[2,4,6]
8 nhanh hơn 3x - 4x so với
>>> list(zip(*[(1, 2), (3, 4), (5, 6)]))
[(1, 3, 5), (2, 4, 6)]
3! Tập lệnh kiểm tra ở đây:

[1,3,5],[2,4,6]
1

Phiên bản Python của tôi:

[1,3,5],[2,4,6]
2

Đã trả lời ngày 7 tháng 11 năm 2017 lúc 0:52Nov 7, 2017 at 0:52

franklsf95franklsf95franklsf95

1.09211 Huy hiệu bạc20 Huy hiệu đồng11 silver badges20 bronze badges

0

Ngoài câu trả lời của Claudiu, bạn có thể sử dụng:

[1,3,5],[2,4,6]
3

Được chỉnh sửa theo @Peyman Mohseni Kiasari

Đã trả lời ngày 26 tháng 5 năm 2019 lúc 11:50May 26, 2019 at 11:50

Hướng dẫn python list of tuples to multiple lists - python danh sách các bộ giá trị đến nhiều danh sách

1

Thêm vào câu trả lời của Claudiu và Claudiu và vì MAP cần được nhập từ itertools trong Python 3, bạn cũng sử dụng danh sách hiểu như:

[1,3,5],[2,4,6]
4

Đã trả lời ngày 24 tháng 5 năm 2017 lúc 11:57May 24, 2017 at 11:57

Quickbeam2k1Quickbeam2k1Quickbeam2k1

4.9972 Huy hiệu vàng23 Huy hiệu bạc42 Huy hiệu Đồng2 gold badges23 silver badges42 bronze badges

Làm thế nào để bạn biến một tuple thành hai danh sách?

Để chuyển đổi danh sách các bộ dữ liệu thành hai danh sách: sử dụng hàm zip () với toán tử * để giải nén danh sách. Đối tượng bản đồ vào một danh sách.Use the zip() function with the * operator to unzip the list. Use the map() function to convert the tuples in the zip object to lists. Use the list() class to convert the map object to a list.

Làm cách nào để lập danh sách từ danh sách các bộ dữ liệu trong Python?

Nếu bạn đang vội, đây là câu trả lời ngắn gọn: Sử dụng câu lệnh Danh sách hiểu [list (x) cho x trong các bộ dữ liệu] để chuyển đổi từng tuple trong Tuples thành một danh sách.Điều này cũng hoạt động cho một danh sách các bộ dữ liệu với số lượng các yếu tố khác nhau.Use the list comprehension statement [list(x) for x in tuples] to convert each tuple in tuples to a list. This also works for a list of tuples with a varying number of elements.

Làm thế nào để bạn thay đổi một danh sách các bộ dữ liệu thành một danh sách?

Để chuyển đổi danh sách các bộ dữ liệu thành danh sách các danh sách: chuyển lớp danh sách () và danh sách các bộ dữ liệu cho hàm bản đồ ().Hàm bản đồ () sẽ chuyển từng tuple trong danh sách vào lớp Danh sách ().Danh sách mới sẽ chỉ chứa các đối tượng danh sách.Pass the list() class and the list of tuples to the map() function. The map() function will pass each tuple in the list to the list() class. The new list will only contain list objects.

Làm thế nào để bạn lập một danh sách hai bộ dữ liệu được liệt kê trong Python?

Cách pythonic nhất để hợp nhất nhiều danh sách l0, l1, ..., ln vào một danh sách các bộ dữ).Nếu bạn lưu trữ danh sách của mình trong danh sách các danh sách LST, hãy viết ZIP (*LST) để giải nén tất cả các danh sách bên trong vào chức năng ZIP.use the zip() function zip(l0, l1, ..., ln) . If you store your lists in a list of lists lst , write zip(*lst) to unpack all inner lists into the zip function.