Hướng dẫn python opposite of zip - python đối diện với zip
nên cung cấp cho bạn danh sách giải nén. Show
vì thế nếu:
Sau đó 0 cung cấp cho bạn:
và
Zipping mà với 2 cung cấp cho bạn hai bộ sưu tập: > Cho một loạt các mảng, nếu tôi muốn tạo bộ dữ liệu, đó là iszip (mảng). Điều gì sẽ xảy ra nếu tôi muốn làm điều ngược lại: phá vỡ một bộ dữ liệu và ứng dụng các giá trị thành các mảng đã cho: MAP (append, mảng, tupl) ngoại trừ không có unbound compend () (list.append () không tồn tại, phải không?). list.append tồn tại (thử hương vị trường hợp thấp hơn). > Không có thêm (), tôi buộc phải viết một vòng lặp rõ ràng (chậm): cho (a, v) trong zip (mảng, tupl): a.Append (v)Ngoại trừ điều đó về mặt kỹ thuật không đối lập với zip. Ngược lại sẽ là một bộ dữ liệu đơn chiều: x = [1,2,3,4,5] y = [10,20,30,40,50] points = zip(x,y) points def unzip (zipped): "" "Cho một chuỗi các chuỗi kích thước kích thước, tạo ra một bộ dữ liệu đại diện cho mỗi chỉ mục trong đối tượng bị kéo. [(1, 10), (2, 20), (3, 30), (4, 40), (5, 50)] >> Zipped = Zip ((1, 2, 3), (4, 5, 6)) >>>> Giải nén (Zipped) . Chỉ số = phạm vi (LEN (Zipped [0])) return tuple (Tuple (cặp [index] cho cặp trong zipped) cho chỉ mục trong các chỉ số) [(1, 2, 3, 4, 5), (10, 20, 30, 40, 50)] Đây có lẽ không phải là mã mã hiệu quả nhất cho việc này nhưng đây dường như là hành vi chính xác cho đối diện với ZIP và nó sẽ mở rộng quy mô tốt.>> DESTS = [[], []] >> unzip_extend (Dests, Zipped) >> Dests import random rand = lambda: random.gauss(mu=1, sigma=1) points = [(rand(), rand()) for i in xrange(1000)] # Make the graph square fig = plt.figure() fig.set_size_inches(7,7) # The scatter function takes an x-list and a y-list, NOT a list of points (x, y) = zip(*points) scatter(x,y) show()
>> Giải nén = zip (*có khóa) được giải nén [(1, 2, 3), (4, 5, 6)] Gọn gàng và hoàn toàn khó hiểu, phải không? :-) - 17 tháng 12 '07 #11 Matt Nordhoff đã viết: [Snip]
> Như Paddy đã viết, Zip là giải nén riêng của nó: >>> Zipped = Zip ((1, 2, 3), (4, 5, 6)) >> Giải nén = zip (*có khóa) được giải nén Matt Nordhoff đã viết: [Snip] > Như Paddy đã viết, Zip là giải nén riêng của nó: >>> Zipped = Zip ((1, 2, 3), (4, 5, 6)) >>> Giải nén = zip (*có khóa) được giải nén Có một giải pháp tốt hơn?
Tôi đã không nghĩ về zip () đối xứng như thế. Rất tuyệt... >> Giải nén = zip (*có khóa) được giải nén Matt Nordhoff đã viết: [Snip] > Như Paddy đã viết, Zip là giải nén riêng của nó: >>> Zipped = Zip ((1, 2, 3), (4, 5, 6)) >>> Giải nén = zip (*có khóa) được giải nén Có một giải pháp tốt hơn? Tôi đã không nghĩ về zip () đối xứng như thế. Rất tuyệt... Giàu có 17 tháng 12 '07 #12 Chủ đề thảo luận này đã đóng Tôi đã không nghĩ về zip () đối xứng như thế. Rất tuyệt... Giàu có 17 tháng 12 '07 #12 Chủ đề thảo luận này đã đóng Tôi đã không nghĩ về zip () đối xứng như thế. Rất tuyệt... Giàu có 17 tháng 12 '07 #12 Chủ đề thảo luận này đã đóng
Câu trả lời đã bị vô hiệu hóa cho cuộc thảo luận này. Cho một loạt các mảng, nếu tôi muốn tạo bộ dữ liệu, có zip (mảng). Điều gì sẽ xảy ra nếu tôi muốn làm điều ngược lại: Break a Tuple Up và nối các giá trị vào các mảng đã cho: MAP (append, mảng, tupl) ngoại trừ không có accover expend () (list.append () không tồn tại, phải không?) . Không có phần phụ (), tôi buộc phải viết một vòng lặp rõ ràng (chậm): cho (a, v) trong zip (mảng, tupl): a. Tôi giả sử sử dụng một biến chỉ mục thay vào đó sẽ không nhanh hơn nhiều. Có một giải pháp tốt hơn? Cảm ơn, Igor Tôi đã không nghĩ về zip () đối xứng như thế. Rất tuyệt... Giàu có [[1, 2, 3, 4, 'A'], [101, 102, 103, 104, 'B']]]] Nó hoạt động, nhưng khó hiểu và khó hiểu, và Lambda có thể làm cho nó chậm. Đừng làm theo cách đó. Không có phần phụ (), tôi buộc phải viết một vòng lặp rõ ràng (chậm): cho (a, v) trong zip (mảng, tupl): a. Bạn có chắc nó chậm không? So với những gì? Đối với hồ sơ, đây là vòng lặp rõ ràng: >> mảng = [[1, 2, 3, 4], [101, 102, 103, 104]] tupl = tuple ("ab") zip (mảng, tupl) [([1, 2, 3, 4], 'A'), ([101, 102, 103, 104], 'B')]] >> cho (a, v) trong zip (mảng, tupl): .... A.Append (v) .... >> mảng [[1, 2, 3, 4, 'a'], [101, 102, 103, 104, 'b']] Tôi nghĩ rằng bạn đang làm cho nó quá phức tạp. Tại sao sử dụng zip ()? >> mảng = [[1, 2, 3, 4], [101, 102, 103, 104]] tupl = tuple ("ab") cho i, alist trong liệt kê (mảng): .... alist.append (tupl [i]) .... >> mảng [[1, 2, 3, 4, 'A'], [101, 102, 103, 104, 'B']]]] [[1, 2, 3, 4, 'a'], [101, 102, 103, 104, 'b']] Tôi nghĩ rằng bạn đang làm cho nó quá phức tạp. Tại sao sử dụng zip ()? >> mảng = [[1, 2, 3, 4], [101, 102, 103, 104]] tupl = tuple ("ab") cho i, alist trong liệt kê (mảng):
.... alist.append (tupl [i]) .... - Steven15 tháng 12 '07 #4>>>arrays = [[1, 2, 3, 4], [101, 102, 103, 104]] tupl = tuple("ab") [Không, không] >>> mảng Nó hoạt động, nhưng khó hiểu và khó hiểu, và Lambda có thể làm cho nó chậm. Đừng làm theo cách đó. Như Gary Herron chỉ ra, bạn không cần phải sử dụng Lambda: Bản đồ (list.append, mảng, tupl) sẽ làm việc. Tôi vẫn duy trì rằng đây là cách sai đối với nó: lấy Lambda ra làm cho giải pháp dựa trên bản đồ () nhanh hơn so với vòng lặp rõ ràng, nhưng tôi không tin rằng mức tăng tốc độ đáng để mất khả năng đọc.
. - Steven. 15 tháng 12 '07 #5 Chào các bạn, Cảm ơn vì sự giúp đỡ. Tôi đã thử chạy các tùy chọn khác nhau và đây là những gì tôi tìm thấy: từ mảng nhập mảng từ thời gian nhập def f1 (recs, cols): for r in recs: for i, v in enumerate (r): cols [i] .append (v) def f2 (recs, cols): cho r trong recs: cho v, c trong zip (r, cols): c.Append (v) def F3 (recs, cols): cho r trong recs: map (list.append, cols, r) def f4 (recs): return zip (*recs) Records = [Tuple (phạm vi (10)) cho i trong xrange (1000000)] cột = tuple ([] cho i trong xrange (10)) t = thời gian () f1 (bản ghi, cột) in 'f1:', thời gian ()-t cột = tuple ([] cho i trong xrange (10)) t = thời gian () f2 (bản ghi, cột) in 'f2:', thời gian ()-t cột = tuple ([] cho i trong xrange (10)) t = thời gian () f3 (bản ghi, cột) in 'f3:', thời gian ()-t t = thời gian () cột = f4 (bản ghi) in 'f4:', thời gian ()-t F1: 5.10132408142 F2: 5.06787180901 F3: 4.04700708389 F4: 19.13633203506 Vì vậy, có một số lợi ích trong việc sử dụng MAP (list.append). F4 rất thông minh và mát mẻ nhưng dường như nó không quy mô.
Ngẫu nhiên, tôi phải mất một thời gian để tìm ra lý do tại sao việc khởi tạo sau không hoạt động: cột = ([],)*10 Rõ ràng bạn kết thúc với 10 bản sao của cùng một danh sách. . F1: 5.10132408142 F2: 5.06787180901 F3: 4.04700708389 F4: 19.13633203506 F1: 5.10132408142 F2: 5.06787180901 F3: 4.04700708389 F4: 19.13633203506 15 tháng 12 '07 #7
Vào ngày 15 tháng 12, 4:45 sáng, Gary Herron đã viết:Chào các bạn,Cảm ơn vì sự giúp đỡ. Tôi đã thử chạy các tùy chọn khác nhau, và đây là những gì tôi tìm thấy: Nếu bạn muốn một câu trả lời khác. Ngược lại với zip (danh sách) là zip (* list_of_tuples) Đó là: Danh sách == zip (zip (* danh sách)) Tôi không biết về tốc độ của nó mặc dù so với các đề xuất khác. Matt 15 tháng 12 '07 #8
ig**************@gmail đã viết: Bản đồ (nối, mảng, tupl) ngoại trừ không có acplound append () (list.append () không tồn tại, phải không?). Er, không, nhưng list.append không: >> Danh sách.Append def f2 (recs, cols): cho r trong recs: cho v, c trong zip (r, cols): c.Append (v) Vì vậy, bạn sẽ có thể làm Bản đồ (list.append, mảng, tupl) Với điều kiện bạn biết rằng tất cả các yếu tố của 'mảng' là danh sách thực tế. - Greg 15 tháng 12 '07 #9
ig**************@gmail đã viết: Bản đồ (nối, mảng, tupl) ngoại trừ không có acplound append () (list.append () không tồn tại, phải không?). Er, không, nhưng list.append không: >> Danh sách.Append Ngoại trừ điều đó về mặt kỹ thuật không đối lập với zip. Ngược lại sẽ là một bộ dữ liệu đơn chiều: Vì vậy, bạn sẽ có thể làm Bản đồ (list.append, mảng, tupl) Với điều kiện bạn biết rằng tất cả các yếu tố của 'mảng' là danh sách thực tế. - Greg 15 tháng 12 '07 #9 Cho một loạt các mảng, nếu tôi muốn tạo bộ dữ liệu, có zip (mảng). Điều gì sẽ xảy ra nếu tôi muốn làm điều ngược lại: Break a Tuple Up và nối các giá trị vào các mảng đã cho: MAP (append, mảng, tupl) ngoại trừ không có accover expend () (list.append () không tồn tại, phải không?) . list.append tồn tại (thử hương vị trường hợp thấp hơn). Không có phần phụ (), tôi buộc phải viết một vòng lặp rõ ràng (chậm): cho (a, v) trong zip (mảng, tupl): a. Ngoại trừ điều đó về mặt kỹ thuật không đối lập với zip. Ngược lại sẽ là một bộ dữ liệu đơn chiều: Bản đồ (list.append, mảng, tupl) Với điều kiện bạn biết rằng tất cả các yếu tố của 'mảng' là danh sách thực tế. - Greg 15 tháng 12 '07 #9 Cho một loạt các mảng, nếu tôi muốn tạo bộ dữ liệu, có zip (mảng). Điều gì sẽ xảy ra nếu tôi muốn làm điều ngược lại: Break a Tuple Up và nối các giá trị vào các mảng đã cho: MAP (append, mảng, tupl) ngoại trừ không có accover expend () (list.append () không tồn tại, phải không?) . list.append tồn tại (thử hương vị trường hợp thấp hơn). Không có phần phụ (), tôi buộc phải viết một vòng lặp rõ ràng (chậm): cho (a, v) trong zip (mảng, tupl): a. Ngoại trừ điều đó về mặt kỹ thuật không đối lập với zip. Ngược lại sẽ là một bộ dữ liệu đơn chiều: def unzip (zipped): "" "Cho một chuỗi các chuỗi kích thước kích thước, tạo ra một bộ dữ liệu đại diện cho mỗi chỉ mục trong đối tượng bị kéo. Thí dụ: >> Zipped = Zip ((1, 2, 3), (4, 5, 6))
[(1, 4), (2, 5), (3, 6)] >> Giải nén (Zipped). Chỉ số = phạm vi (LEN (Zipped [0])) return tuple (Tuple (cặp [index] cho cặp trong zipped) cho chỉ mục trong các chỉ số) Điều này sẽ hoạt động khá tốt, vì mở rộng với sự hiểu biết là khá nhanh. Không phải là nó thực sự có ý nghĩa, đây là thời gian trên máy tính xách tay 2GHz của tôi: bash -3.1 $ python -m thời gian nhập thời gian -s 'nhập khẩu; Zipped = zip (phạm vi (1024), phạm vi (1024)) '' unzip.unzip_extend ([], []], zipped) '1000 vòng, tốt nhất 3: 510 USEC mỗi vòng lặp [(1, 4), (2, 5), (3, 6)] >> Giải nén (Zipped) . Chỉ số = phạm vi (LEN (Zipped [0])) return tuple (Tuple (cặp [index] cho cặp trong zipped) cho chỉ mục trong các chỉ số) Đây có lẽ không phải là mã mã hiệu quả nhất cho việc này nhưng đây dường như là hành vi chính xác cho đối diện với ZIP và nó sẽ mở rộng quy mô tốt. Việc sửa đổi ở trên với Danh sách.extend sẽ tạo ra một biến thể gần hơn với những gì tôi nghĩ bạn đang yêu cầu: def unzip_extend (Dests, Zipped): "" "Bổ số các phiên bản giải nén của Zipped vào DOTS. Điều này tránh được sự phân bổ không cần thiết.
>> DESTS = [[], []] >> unzip_extend (Dests, Zipped) >> Dests [[1, 2, 3], [4, 5, 6]] "" "Nếu len (zipped) <1: nâng giá trị, 'ít nhất một mục là bắt buộc để giải nén.' Đối với chỉ mục trong phạm vi (LEN (Zipped [0])): Dests [Index] .extend (cặp [INDEX] cho cặp trong Zipped) def unzip_extend (Dests, Zipped): "" "Bổ số các phiên bản giải nén của Zipped vào DOTS. Điều này tránh được sự phân bổ không cần thiết. >> DESTS = [[], []] >> unzip_extend (Dests, Zipped) >> Dests [[1, 2, 3], [4, 5, 6]] "" "Nếu len (zipped) <1: nâng giá trị, 'ít nhất một mục là bắt buộc để giải nén.' Đối với chỉ mục trong phạm vi (LEN (Zipped [0])): Dests [Index] .extend (cặp [INDEX] cho cặp trong Zipped) Điều này sẽ hoạt động khá tốt, vì mở rộng với sự hiểu biết là khá nhanh. Không phải là nó thực sự có ý nghĩa, đây là thời gian trên máy tính xách tay 2GHz của tôi:bash -3.1 $ python -m thời gian nhập thời gian -s 'nhập khẩu; Zipped = zip (phạm vi (1024), phạm vi (1024)) '' unzip.unzip_extend ([], []], zipped) '1000 vòng, tốt nhất 3: 510 USEC mỗi vòng lặp |