Tôi muốn viết một hàm khôi phục danh sách [1,5,3,6,...]
và cung cấp [1,1,5,5,3,3,6,6,...]
bất kỳ ý tưởng nào về cách thực hiện? nhờsao chép từng thành viên trong một danh sách - python
Trả lời
>>> a = [1, 2, 3]
>>> b = []
>>> for i in a:
b.extend([i, i])
>>> b
[1, 1, 2, 2, 3, 3]
hoặc
>>> [a[i//2] for i in range(len(a)*2)]
[1, 1, 2, 2, 3, 3]
Bạn cũng nên sử dụng '//' để chia tầng trong Python 2. –
@Mike: chắc chắn bạn đúng, ngoại trừ khóa học trong phân chia '/' đảm bảo rằng 'int' được trả về. – SilentGhost
>>> a = range(10)
>>> [val for val in a for _ in (0, 1)]
[0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9]
N.B. _
theo truyền thống được sử dụng như một tên biến giữ chỗ mà bạn không muốn làm bất cứ điều gì với nội dung của biến. Trong trường hợp này, nó chỉ được sử dụng để tạo ra hai giá trị cho mỗi lần vòng vòng ngoài.
Để biến điều này từ danh sách thành máy phát, hãy thay thế các dấu ngoặc vuông bằng dấu ngoặc tròn.
'_' là, những ngày này, được sử dụng cho i18n/l10n (google). Tôi vẫn có xu hướng sử dụng nó * nếu * Tôi biết sẽ không có một i18n trong mô-đun này. Khác tôi (sẽ) sử dụng '__' (hai dấu gạch dưới). –
Tôi sẽ sử dụng
import itertools
foo = [1, 5, 3, 6]
new = itertools.chain.from_iterable([item, item] for item in foo)
new
sẽ là một iterator mà uể oải lặp trên các mặt hàng nhân đôi. Nếu bạn cần danh sách thực tế được tính, bạn có thể làm list(new)
hoặc sử dụng một trong các giải pháp khác.
hoặc ngắn hơn: 'itertools.chain.from_iterable (itertools.izip (foo, foo))' –
Tôi coi mã đó ngắn hơn nhưng dường như không rõ ràng hơn với tôi. –
Nếu bạn đã có roundrobin
thức được mô tả trong tài liệu hướng dẫn cho itertools
-Và nó là khá tiện dụng-sau đó bạn chỉ có thể sử dụng
roundrobin(my_list, my_list)
+1, đây là một cách hay để thực hiện việc này. –
Đối với càng nhiều càng Guido không thích các nhà khai thác chức năng, họ có thể được khá darned handy:
>>> from operator import add
>>> a = range(10)
>>> b = reduce(add, [(x,x) for x in a])
Trong trường hợp giảm, tiện dụng thường có nghĩa là đáng kinh ngạc chậm. Điều quan trọng là phải đo lường những gì 'giảm' đang làm. Thông thường, nó gây sốc bao nhiêu tính toán giảm lực lượng. –
Tôi đã thực hiện một kịch bản thử nghiệm với mỗi một trong các phương pháp trên trang này với các baselist = range (10) và 1.000.000 iterations. Tốc độ chậm nhất mất 5.094 giây và nhanh nhất mất 3.622 giây. Ví dụ giảm của tôi mất 3.906 giây. –
'phạm vi (10)' là nhỏ, vì vậy sự phức tạp trả một vai trò nhỏ. Giải pháp này là bậc hai; tất cả những người khác tôi thấy ở đây là tuyến tính. Ngoài ra, một số người khác dường như dễ đọc hơn đối với tôi. –
Tôi sẽ sử dụng zip
và itertools.chain
.
>>> import itertools
>>> l = [1,5,3,6,16]
>>> list(itertools.chain(*zip(l,l)))
[1, 1, 5, 5, 3, 3, 6, 6, 16, 16]
Lưu ý: Tôi chỉ sử dụng list
để sử dụng máy phát điện để phù hợp để in. Có thể bạn không cần cuộc gọi list
trong mã của mình ...
Có thể sử dụng phép nhân danh sách. Trường hợp bạn cần mỗi thành viên danh sách với nhau chỉ cần sử dụng phương pháp được sắp xếp.
>>> lst = [1,2,3,4]
>>> sorted(lst*2)
[1,1,2,2,3,3,4,4]
Còn nếu bạn muốn giữ lại thứ tự của danh sách gốc? Điều gì sẽ xảy ra nếu các mục trong danh sách không thể đặt hàng? – Moberg
- 1. Sao chép danh sách python
- 2. Python: sao chép danh sách trong danh sách
- 3. Sao chép danh sách 2D vào python
- 4. Gói danh sách LaTeX: danh sách có thể sao chép
- 5. Sao chép danh sách các danh sách trong groovy
- 6. Sao chép danh sách trong python: sâu vs nông bản sao: gotcha cho tôi trong python?
- 7. khởi tạo các thành viên của một danh sách
- 8. Cách sao chép danh sách trong Scala
- 9. Phương pháp sao chép từ thành viên
- 10. Python struct.pack() cho từng phần tử trong danh sách?
- 11. Làm cách nào để chia các thành viên của danh sách cho các thành viên tương ứng của một danh sách khác bằng Python?
- 12. Sao chép danh sách không hoạt động?
- 13. sao chép danh sách python: có sự khác biệt giữa [cũ] và danh sách (cũ) không?
- 14. Sao chép danh sách khởi tạo bản dựng
- 15. sao chép các mục danh sách từ danh sách này sang danh sách khác trong sharepoint
- 16. chuyển đổi danh sách phẳng thành danh sách trong python
- 17. Gọi từng chức năng trong danh sách
- 18. Tạo danh sách với chỉ một thành viên lớp
- 19. Thêm chuỗi ở trước một chuỗi cho từng mục trong danh sách trong python
- 20. Các chi tiết cụ thể về Danh sách Thành viên
- 21. Giữ các bản sao trong một danh sách bằng Python
- 22. Lấy danh sách thành viên nhóm (memberOf) trong Active Directory
- 23. Thành viên của Bản sao thành viên
- 24. Python - sao chép một tệp
- 25. Làm thế nào để đạt được danh sách list.list để sao chép danh sách trong smooks
- 26. Python biến một danh sách thành một danh sách các hàng
- 27. cố gắng sao chép các thành viên struct thành mảng byte trong c
- 28. LINQ Danh sách phân vùng vào danh sách của 8 thành viên
- 29. Java - sao chép các đối tượng mảng danh sách
- 30. Tạo một Danh sách chứa từng Dòng của Tệp
Âm thanh làm bài tập. Có nhiều cách tốt hơn để làm việc với một danh sách hơn là nhân đôi các phần tử. –