替换元组中的项目

时间:2015-06-15 19:23:49

标签: python list tuples

除非只有一个项目,否则我必须编写一个代码来切换元组中的第一个项目。我在元组中理解这是不可能完成的,但它可以在列表中完成。所以在我的代码中,我将元组更改为列表。 在运行代码后,它应该如下所示:

>>>switchItems((6,4,8,3,7,9,4))
(4,4,8,3,7,9,6) 
>>>switchItems((“hi” , 23))
(23, “hi”) 
>>>switchItems((89,))
(89,)

我的代码不会这样做。它返回一个列表,我真的不知道如何使它正常工作,这是我的代码:

switchItems(tuple):
    new = list(tuple)
    return new[-1],new [1:-2],new[0]

然后它返回:

    >>>switchItems((6,4,8,3,7,9,4))
        (4, [4, 8, 3, 7], 6)'

4 个答案:

答案 0 :(得分:4)

这是修复代码的一种方法。

def switchItems(tup):
    if len(tup) > 1:
        new = list(tup)
        new[0], new[-1] = new[-1], new[0]
        return tuple(new)
    return tup

长度检查有助于避免可能的错误和针tuplelisttuple转换。

现在,让我们谈谈你的问题。

  • 未正确定义函数switchItems。在Python中,您应该使用def(或lambda)来定义函数,但我确信这是复制粘贴的工件。

  • 您不应该使用隐藏内置名称的参数名称,即不要使用tuple作为参数名称。

  • 根据PEP8,您应该避免使用CamelCase来命名Python中的函数,例如: switchItems应为switch_items。这不是强制执行,但非常感谢。

答案 1 :(得分:4)

长度无关紧要,您只需要交换第一个和最后一个元素:

def switch_items(t): # use lowercase  and underscores for function names
    t = list(t)
    t[0],t[-1] = t[-1],t[0]
    return tuple(t)

你可能想要抓住一个空元组:

或切片并检查len:

def switch_items(t):
    return  t[-1:] + t[1:-1] + t[0:1] if len(t) > 1 else t

答案 2 :(得分:0)

如果你只需要一个切换元组的副本。 (当然你不会得到它)

def switchItems(t):
    if len(t) > 1:
        return tuple(t[-1] + list(t[1:-2]) + t[0])
    return t

答案 3 :(得分:0)

您可以执行以下操作:

def switchItems(my_tuple): 
    l1 = list(my_tuple)  # Convert to a list
    if l1:  # check if not empty to prevent 'list index out of range' error 
        l1[0], l1[-1] = l1[-1], l1[0]  #swap first and last items

    return tuple(l1)

您将元组传递给switchItems()函数。该函数将元组转换为列表。然后,如果在上一步中获得的列表不为空,则使用索引0-1交换第一个和最后一个元素。这样做是为了防止在访问第一个和最后一个元素时出现list index out of range错误。