相关疑难解决方法(0)

在Python中以列表(循环方式)迭代对

问题很简单,我想迭代遍历列表中的每个元素和成对的下一个元素(将最后一个元素包装在第一个元素中).

我想过两种非常规的方式:

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折(有三胞胎,四重奏等代替对)版本可能很有趣.

python iteration tuples list

35
推荐指数
4
解决办法
2万
查看次数

按连续顺序对元组列表进行排序

我想按连续顺序对元组列表进行排序,因此每个元组的第一个元素等于前一个元素的最后一个元素.

例如:

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方式来实现这样的秩序?还有一种"就地"(只有一个列表)的方法吗?

在我的问题中,输入可以使用所有元组以循环方式重新排序,因此选择的第一个元素并不重要.

python list python-3.x

13
推荐指数
2
解决办法
1821
查看次数

标签 统计

list ×2

python ×2

iteration ×1

python-3.x ×1

tuples ×1