Tôi có danh sách một số thành phần, ví dụ: [1, 2, 3, 4]
và một đối tượng, ví dụ: 'a'
. Tôi muốn tạo một danh sách các bộ dữ liệu với các phần tử của danh sách ở vị trí đầu tiên và đối tượng đơn ở vị trí thứ hai: [(1, 'a'), (2, 'a'), (3, 'a'), (4, 'a')]
.Python: danh sách zip có một thành phần đơn lẻ
tôi có thể làm điều đó với zip
như thế này:
def zip_with_scalar(l, o): # l - the list; o - the object
return list(zip(l, [o] * len(l)))
Tuy nhiên điều này mang lại cho tôi một cảm giác của việc tạo ra và danh sách không cần thiết lặp lại phần tử.
Một khả năng khác là
def zip_with_scalar(l, o):
return [(i, o) for i in l]
đó là rất sạch sẽ và pythonic thực sự, nhưng ở đây tôi làm toàn bộ điều "thủ công". Trong Haskell tôi sẽ làm một cái gì đó giống như
zipWithScalar l o = zip l $ repeat o
Có tích hợp chức năng hoặc lừa, hoặc là cho nén với vô hướng hoặc kiếm cái gì đó sẽ cho phép tôi sử dụng zip bình thường, ví dụ sắp xếp của danh sách vô hạn?
https://docs.python.org/3/library/itertools.html#itertools.repeat – jonrsharpe
gì jonrsharpe nói, nhưng cũng có thể bạn muốn viết lại đó như một máy phát điện, chứ không phải là một chức năng thông thường. – OmnipotentEntity
@OmnipotentEntity như OP đang sử dụng 3.x họ chỉ có thể 'return zip (l, repeat (o))'; đó là một iterator, không cần phải 'yield'. – jonrsharpe