最初的问题是创建一个以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]
这个代码就是无法运行,有人能告诉我我做错了什么吗?
有几个问题:
-
压痕需要固定。
-
L(i).replace(L(i)[1:-1])
不正确。 -
string
未定义。你是说str
。 -
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]