最初的问题是创建一个以列表作为参数的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]
这段代码不会运行,任何人都可以给我一些提示我做错了吗?
答案 0 :(得分:2)
有一些问题:
缩进需要修复。
L(i).replace(L(i)[1:-1])
不正确。
string
未定义。你的意思是str
。
elif
。
因此:
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]