我想了解一下这个突变列表函数



最初的问题是创建一个以list为参数的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. 压痕需要固定。

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

  3. string未定义。你是说str

  4. elif是必需的,因为布尔测试True既是整数也是布尔。

因此:

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]

最新更新