2009-07-17 28 views
19

Nói rằng tôi có một danh sách như thế này:Merge một số mặt hàng danh sách trong một Python Danh sách

[a, b, c, d, e, f, g] 

Làm thế nào để sửa đổi danh sách đó để nó trông như thế này?

[a, b, c, def, g] 

Tôi rất muốn nó sửa đổi danh sách hiện có trực tiếp, không tạo danh sách mới.

+1

Trên cơ sở những gì nên việc sáp nhập diễn ra? – Stephan202

+2

a, b, v.v. (nghĩa là loại dữ liệu nào)? Vì nó là viết tắt, gõ này vào một thông dịch viên Python cho một lỗi vì đây là những tên không liên kết. –

+0

Bạn có luôn muốn những mục đó trong danh sách được ghép nối hay bạn muốn có thể chọn vị trí và số lượng sau đó? – tgray

Trả lời

27

Ví dụ đó khá mơ hồ, nhưng có thể giống như thế này?

items = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h'] 
items[3:6] = [''.join(items[3:6])] 

Về cơ bản, nó hoạt động liên kết (hoặc assignment to a slice). Nó loại bỏ các mục từ 3 đến 6 và chèn một danh sách mới vào vị trí của chúng (trong trường hợp này là một danh sách có một mục, là phần nối của ba mục đã bị xóa.)

Đối với bất kỳ loại danh sách nào, bạn có thể làm này (sử dụng các nhà điều hành + trên tất cả các mặt hàng không có vấn đề gì loại của họ là):

items = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h'] 
items[3:6] = [reduce(lambda x, y: x + y, items[3:6])] 

điều này làm cho việc sử dụng reduce chức năng với một chức năng lambda rằng về cơ bản thêm các mặt hàng cùng sử dụng toán tử +.

+0

Điều này làm việc tuyệt vời cho một danh sách các chuỗi. Nếu các phần tử không phải là chuỗi, bạn sẽ cần phải sử dụng một cái gì đó khác với '' .join() – tgray

+0

Bạn nói đúng, tôi đã thêm một ví dụ bằng cách sử dụng 'reduce' làm việc cho bất kỳ loại mục nào hỗ trợ' + ' nhà điều hành. Tôi không thể làm nhiều hơn thế trừ khi OP mở rộng câu hỏi của anh ta. – Blixt

+0

Câu hỏi của ông không thực sự có ý nghĩa đối với bất cứ điều gì khác hơn là dây. –

37

Trên cơ sở nào việc sáp nhập diễn ra? Câu hỏi của bạn khá mơ hồ. Ngoài ra, tôi giả sử một, b, ..., f được coi là chuỗi, đó là, 'a', 'b', ..., 'f'.

>>> x = ['a', 'b', 'c', 'd', 'e', 'f', 'g'] 
>>> x[3:6] = [''.join(x[3:6])] 
>>> x 
['a', 'b', 'c', 'def', 'g'] 

Kiểm tra tài liệu trên sequence types, cụ thể là mutable sequence types. Và có lẽ cũng trên string methods.

0

khả năng ngoại cảm của tôi không phải là đặc biệt lớn, nhưng đây là những gì tôi nghĩ rằng bạn muốn:

def merge(list_of_strings, indices): 
    list_of_strings[indices[0]] = ''.join(list_of_strings[i] for i in indices) 
    list_of_strings = [s for i, s in enumerate(list_of_strings) if i not in indices[1:]] 
    return list_of_strings 

tôi nên lưu ý, vì nó có thể là không rõ ràng, rằng nó không giống như những gì được đề xuất trong khác câu trả lời.

4

chỉ là một biến thể

alist=["a", "b", "c", "d", "e", 0, "g"] 
alist[3:6] = [''.join(map(str,alist[3:6]))] 
print alist 
Các vấn đề liên quan