我想知道一下这个mutate list函数

时间:2015-05-21 04:56:39

标签: python list function for-loop

最初的问题是创建一个以列表作为参数的mutate_list函数。该函数将通过以下方式修改列表: - 作为整数的任何元素乘以2 - 作为布尔值的任何元素被反转(True变为False,False变为True) - 作为字符串的任何元素都删除了第一个和最后一个字母 - 第0个元素设置为字符串Hello,无论其原始类型

我写的代码是:

def mutate_list (L):
 L[0]="Hello"
  for i in range (1,len(L)):
   if isinstance(L[i], int):
    L[i]=L[i]*2
   if isinstance(L[i], string):
    L(i).replace(L(i)[1:-1])
   if isinstance(L[i], bool):
    L[i]=not L[i]

这段代码不会运行,任何人都可以给我一些提示我做错了吗?

1 个答案:

答案 0 :(得分:2)

有一些问题:

  1. 缩进需要修复。

  2. L(i).replace(L(i)[1:-1])不正确。

  3. string未定义。你的意思是str

  4. 由于布尔值测试为整数和布尔值,因此需要
  5. elif

  6. 因此:

    def mutate_list (L):
      L[0]="Hello"
      for i in range (1,len(L)):
       if isinstance(L[i], bool):
        L[i]=not L[i]
       elif isinstance(L[i], int):
        L[i]=L[i]*2
       elif isinstance(L[i], str):
        L[i] = L[i][1:-1]
    

    这会使L变异。例如:

    >>> L = [True, True, 'abc', 3]
    >>> mutate_list(L)
    >>> L
    ['Hello', False, 'b', 6]
    

    替代

    另一种方法是列表理解。这将根据您指定的规则返回一个新列表:

    ['Hello'] + [not a if isinstance(a, bool) else a[1:-1] if isinstance(a, str) else 2*a if isinstance(a, int) else a for a in L[1:]]
    

    例如:

    >>> L = [True, True, 'abc', 3]
    >>> ['Hello'] + [not a if isinstance(a, bool) else a[1:-1] if isinstance(a, str) else 2*a if isinstance(a, int) else a for a in L[1:]]
    ['Hello', False, 'b', 6]