Tôi đang tìm kiếm một cách để so sánh hai mục liền kề trong danh sách, ví dụ. So sánh có giá trị cao hơn, và sau đó tôi sẽ sắp xếp chúng cho phù hợp. Đây là danh sách mà người dùng sẽ nhập, vì vậy nó không phải là trường hợp chỉ là if l[1] > l[2]
, vì tôi sẽ không biết độ dài của danh sách, vì vậy tôi sẽ cần một tuyên bố chung để sử dụng trong một vòng lặp.
Tôi đã có ý tưởng có một cái gì đó gần giống với for i in l:
if x > i[index of x + 1]
nhưng không biết làm thế nào để tìm chỉ số của biến. Bất kỳ sự giúp đỡ nào được đánh giá cao, cảm ơn bạn
Chỉnh sửa: Tôi biết về chức năng sắp xếp tích hợp, nhưng chỉ muốn thực hành mã hóa và viết thuật toán bằng cách tạo của riêng tôi :]
Đã hỏi ngày 23 tháng 12 năm 2012 lúc 16:21Dec 23, 2012 at 16:21
Ricochet_BunnyRicochet_BunnyRicochet_Bunny
5373 Huy hiệu vàng8 Huy hiệu bạc19 Huy hiệu đồng3 gold badges8 silver badges19 bronze badges
1
Bạn có thể sử dụng zip[]
:
In [23]: lis = [1,7,8,4,5,3]
In [24]: for x, y in zip[lis, lis[1:]]:
....: print x, y # prints the adjacent elements
# do something here
....:
1 7
7 8
8 4
4 5
5 3
Đã trả lời ngày 23 tháng 12 năm 2012 lúc 16:25Dec 23, 2012 at 16:25
Ashwini Chaudharyashwini ChaudharyAshwini Chaudhary
237K56 Huy hiệu vàng447 Huy hiệu bạc497 Huy hiệu đồng56 gold badges447 silver badges497 bronze badges
1
Giải pháp nhanh chóng và tương đương sẽ là điều này [không sử dụng nó!]:
for i, item in enumerate[lst]:
# here you can use lst[i + 1] as long as i + 1 < len[lst]
Tuy nhiên, đừng thực hiện danh sách sắp xếp một mình! Sử dụng .sort[]
để sắp xếp tại chỗ hoặc
for i, item in enumerate[lst]:
# here you can use lst[i + 1] as long as i + 1 < len[lst]
0 nếu bạn muốn tạo một danh sách mới thay thế. Có một hướng dẫn thực sự tốt về cách sắp xếp mọi thứ trên trang web Python.do not implement list sorting by yourself! Use .sort[]
to sort in-place or for i, item in enumerate[lst]:
# here you can use lst[i + 1] as long as i + 1 < len[lst]
0 if you want to create a new list instead. There is a
really good guide on how to sort things on the python website.Nếu đó không phải là ý định của bạn .. Thay vì vòng lặp tôi đã đăng ở trên thì cũng có một cách đẹp hơn để lặp lại các phần từ một danh sách trong một câu hỏi khác:
import itertools
def grouper[n, iterable, fillvalue=None]:
"grouper[3, 'ABCDEFG', 'x'] --> ABC DEF Gxx"
args = [iter[iterable]] * n
return itertools.izip_longest[fillvalue=fillvalue, *args]
Bạn sử dụng để thích điều này:
for x, y in grouper[2, lst]:
# do whatever. in case of an odd element count y is None in the last iteration
Đã trả lời ngày 23 tháng 12 năm 2012 lúc 16:23Dec 23, 2012 at 16:23
ThiefmasterthiefmasterThiefMaster
303K79 Huy hiệu vàng582 Huy hiệu bạc625 Huy hiệu Đồng79 gold badges582 silver badges625 bronze badges
2
Bạn cũng có thể sử dụng chức năng giảm dần
ví dụ. :
l = [1,2,3,4,5,6,7]
def my_function[a,b]:
# your comparison between a and b
# return or print values or what ever you want to do based on the comparison
reduce[my_function, l]
Giảm sẽ tự động chăm sóc I và I + 1.
Hy vọng nó giúp. :]
Đã trả lời ngày 24 tháng 12 năm 2012 lúc 5:48Dec 24, 2012 at 5:48
SomeshsomeshSomesh
1.1852 huy hiệu vàng12 Huy hiệu bạc29 Huy hiệu đồng2 gold badges12 silver badges29 bronze badges
1
Có được tích hợp trong chức năng CMP, mà bạn có thể sử dụng để so sánh
Tôi cần kiểm tra xem tất cả các mục trong danh sách có giống hệt nhau không, vì vậy tôi đã làm điều này:
def compare[x, y]:
if x == y:
return x
return False
reduce[compare, my_list]
Khi bạn chạy cái này với nói [1,1,1,1,1,1], nó in 1, khi một trong số không khớp, nó sẽ trả về sai .. đơn giản
Đã trả lời ngày 29 tháng 1 năm 2014 lúc 13:23Jan 29, 2014 at 13:23
Lu.nemecLu.nemecLu.nemec
4566 Huy hiệu bạc10 Huy hiệu Đồng6 silver badges10 bronze badges
1