问题很简单,我想迭代遍历列表中的每个元素和成对的下一个元素(将最后一个元素包装在第一个元素中).
我想过两种非常规的方式:
def pairs(lst):
n = len(lst)
for i in range(n):
yield lst[i],lst[(i+1)%n]
Run Code Online (Sandbox Code Playgroud)
和:
def pairs(lst):
return zip(lst,lst[1:]+[lst[:1]])
Run Code Online (Sandbox Code Playgroud)
预期产量:
>>> for i in pairs(range(10)):
print i
(0, 1)
(1, 2)
(2, 3)
(3, 4)
(4, 5)
(5, 6)
(6, 7)
(7, 8)
(8, 9)
(9, 0)
>>>
Run Code Online (Sandbox Code Playgroud)
有关更多pythonic方式的任何建议吗?也许有一个我没有听说过的预定义功能?
也是一个更普遍的n折(有三胞胎,四重奏等代替对)版本可能很有趣.
我想按连续顺序对元组列表进行排序,因此每个元组的第一个元素等于前一个元素的最后一个元素.
例如:
input = [(10, 7), (4, 9), (13, 4), (7, 13), (9, 10)]
output = [(10, 7), (7, 13), (13, 4), (4, 9), (9, 10)]
Run Code Online (Sandbox Code Playgroud)
我开发了这样的搜索:
output=[]
given = [(10, 7), (4, 9), (13, 4), (7, 13), (9, 10)]
t = given[0][0]
for i in range(len(given)):
# search tuples starting with element t
output += [e for e in given if e[0] == t]
t = output[-1][-1] # Get the next element to search
print(output)
Run Code Online (Sandbox Code Playgroud)
是否有一种pythonic方式来实现这样的秩序?还有一种"就地"(只有一个列表)的方法吗?
在我的问题中,输入可以使用所有元组以循环方式重新排序,因此选择的第一个元素并不重要.