【问题标题】:Swap two numbers in list of tuples (python)交换元组列表中的两个数字(python)
【发布时间】:2015-10-01 08:20:28
【问题描述】:

我有一个完整的匹配形式:

M=[(1,3),(2,4),(5,6)]

我想对其进行简单的换位。

函数si(M) 应该交换数字ii+1 的位置。

例如s2(M)应该交换数字23的位置:

s2(M) 应该返回:

[(1,2),(3,4),(5,6)]

最好用python3代码编写。

【问题讨论】:

  • SO 不是随便请人为您工作的地方。请尝试自己编写代码,如果遇到任何问题,请询问他们。
  • 那很好。所以,写一些代码,如果你遇到问题,写一个主题问题并在这里发布。
  • 请发表您自己编写此函数的尝试,我们将帮助您修复它。元组并不真正适合这种情况,因为它们是不可变的。你的转置函数应该有两个参数:你想要转置的列表和索引。
  • @Alex Gain 一种方法是首先将 元组列表 转换为 列表列表,然后使用元素的索引交换所需的值在列表列表中;通常让我们假设您的列表列表是 L。您可以使用 L[i][j] 作为元素的索引并交换其中 i 将从 0 到列表长度和 j 将在 0 到 1 之间变化。
  • 感谢您的伪代码,非常感谢。 @TanmayaMeher

标签: python python-3.x


【解决方案1】:

对于任何好奇的人,我很快为它编写了一个函数。首先,完整的匹配被写成一个二维列表。

在写main之前需要如下函数:

def index_2d(myList, v): #Returns tuple containing the position of v in the 2D list
  for i, x in enumerate(myList):
     if v in x:
        return (i, x.index(v))

例如。如果完全匹配是 M=[[1,2],[3,4],[5,6]],则 index_2d(M, 4) 将返回 (1,1)。

接下来,简单的转置函数:

def s(M,n):
   a=index_2d(M,n)
   b=index_2d(M,n+1)
   M[a[0]][a[1]], M[b[0]][b[1]] = M[b[0]][b[1]], M[a[0]][a[1]]
   return M

我不关心效率,所以也许有比这更有效的代码。

【讨论】:

    猜你喜欢
    • 2020-11-23
    • 1970-01-01
    • 2018-05-16
    • 2012-11-03
    • 2011-09-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-23
    相关资源
    最近更新 更多