24
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.
Tôi có một danh sách các chuỗi được gọi là giá trị và tôi muốn tạo một yếu tố trong danh sách là yếu tố cuối cùng. Ví dụ: nếu tôi có chuỗi:
['string1', 'string2', 'string3']
Tôi muốn String2 là yếu tố cuối cùng:
['string1', 'string3', 'string2']
Cũng có thể có một thể hiện khi danh sách của tôi không chứa chuỗi2. Có cách nào làm dễ hơn không? Đây là những gì tôi có cho đến nay:
if 'string2' in values:
for i in values:
#remove string2 and append to end
Hỏi ngày 2 tháng 12 năm 2013 lúc 4:13Dec 2, 2013 at 4:13
4
>>> lst = ['string1', 'string2', 'string3']
>>> lst.append[lst.pop[lst.index['string2']]]
>>> lst
['string1', 'string3', 'string2']
Chúng tôi tìm kiếm chỉ mục của
['string1', 'string3', 'string2']
1, bật chỉ mục ra khỏi danh sách và sau đó nối nó vào danh sách.Có lẽ một cách miễn phí ngoại lệ hơn là thêm thứ bạn đang tìm kiếm vào cuối danh sách trước tiên [sau tất cả, bạn có lẽ đã biết nó là gì]. Sau đó xóa phiên bản đầu tiên của chuỗi đó khỏi danh sách:
>>> lst = ['string1', 'string2', 'string3']
>>> lst.append['string2']
>>> del lst[lst.index['string2']] # Equivalent to lst.remove['string2']
>>> lst
['string1', 'string3', 'string2']
Đã trả lời ngày 2 tháng 12 năm 2013 lúc 4:15Dec 2, 2013 at 4:15
Mgilsonmgilsonmgilson
289K60 Huy hiệu vàng605 Huy hiệu bạc676 Huy hiệu Đồng60 gold badges605 silver badges676 bronze badges
1
['string1', 'string3', 'string2']
2 là O [n] cho hoạt động này, vì vậy đó là cùng một thời gian phức tạp với câu trả lời khác mà không có tra cứu chức năng 2 hoặc 3. Không có lỗi nếu 'String2' không có trong danh sách>>> lst = ['string1', 'string2', 'string3']
>>> lst.sort[key='string2'.__eq__]
>>> lst
['string1', 'string3', 'string2']
Bạn có thể sử dụng cùng một thủ thuật này để di chuyển tất cả "chuỗi2" đến cuối danh sách. Hoặc nói chung hơn là toàn bộ danh mục, ví dụ như di chuyển mọi thứ bắt đầu bằng
['string1', 'string3', 'string2']
3 đến cuối danh sách:lst.sort[key=lambda s:s.startswith['string']]
Timsort coi đây là tối đa 3 "chạy" và Timsort là một loại ổn định
Đã trả lời ngày 2 tháng 12 năm 2013 lúc 4:35Dec 2, 2013 at 4:35
John La Rooyjohn La RooyJohn La Rooy
286K51 Huy hiệu vàng359 Huy hiệu bạc499 Huy hiệu đồng51 gold badges359 silver badges499 bronze badges
0
lst = ['string1', 'string2', 'string3']
lst.append['string2']
lst.remove['string2'] # -> ['string1', 'string3', 'string2']
[Mgilson đã tạo ra một điểm tuyệt vời - nếu bạn thêm giá trị vào danh sách trước, sẽ luôn có một để xóa]
Đã trả lời ngày 2 tháng 12 năm 2013 lúc 4:18Dec 2, 2013 at 4:18
Hugh Bothwellhugh BothwellHugh Bothwell
53,8K7 Huy hiệu vàng81 Huy hiệu bạc98 Huy hiệu Đồng7 gold badges81 silver badges98 bronze badges
3
Đưa ra sự làm rõ của bạn, rằng bạn chỉ muốn một mục chọn được đẩy đến cuối và bạn không quan tâm đến nơi có phần cuối cùng, tôi nghĩ điều nhanh nhất là tìm chỉ số giá trị ứng cử viên của bạn và hoán đổi đó với giá trị cuối cùng. Điều này tránh phải xáo trộn bộ nhớ từ Remove []. Tôi đã không hẹn giờ, nhưng trong các danh sách lớn, nó sẽ nhanh hơn [Otoh, nếu nó đủ nhanh cho bạn, bạn không nên quan tâm].
def pushToEnd[sequence, toBeLast]:
try:
swapIndex = sequence.index[toBeLast]
except ValueError:
return
sequence[-1], sequence[swapIndex] = sequence[swapIndex], sequence[-1]
fastCars = ['ferarri', 'porsche', 'bugatti', 'lamborghini', 'zonda', 'koenigsegg', 'mcclaren']
pushToEnd[fastCars, 'bugatti']
print[fastCars]
Đã trả lời ngày 2 tháng 12 năm 2013 lúc 18:56Dec 2, 2013 at 18:56
Travis Griggstravis GriggsTravis Griggs
20.7K18 Huy hiệu vàng90 Huy hiệu bạc157 Huy hiệu đồng18 gold badges90 silver badges157 bronze badges
0
#move nth element to last
def movetolast[s, n]:
last = s.index[n]
s[-1], s[last] = s[last], s[-1]
return s
print[movetolast[[2,3,4,6,7],3]] #[2, 7, 4, 6, 3]
print[movetolast[['apple','cherry','kiwi','mango'],'apple']] #['mango', 'cherry', 'kiwi', 'apple']
Đã trả lời ngày 5 tháng 7 năm 2020 lúc 8:46Jul 5, 2020 at 8:46
1
Đây là một cách đơn giản hơn với việc trả lại danh sách mới:
['string1', 'string3', 'string2']
0Đã trả lời ngày 17 tháng 5 năm 2021 lúc 12:46May 17, 2021 at 12:46
MacSunmoodMacsunmoodmacsunmood
11 Huy hiệu vàng1 Huy hiệu bạc1 Huy hiệu đồng1 gold badge1 silver badge1 bronze badge