gpt4 book ai didi

python - 在没有列表理解、切片或使用 [ ] 的情况下替换列表中的元素

转载 作者:太空狗 更新时间:2023-10-29 22:09:35 27 4
gpt4 key购买 nike

I'm taking this online Python course他们不喜欢学生使用单线解决方案。该类(class)不接受此解决方案的括号。

我已经使用列表理解解决了这个问题,但是类(class)拒绝了我的答案。

问题如下:

Using index and other list methods, write a function replace(list, X, Y) which replaces all occurrences of X in list with Y. For example, if L = [3, 1, 4, 1, 5, 9] then replace(L, 1, 7) would change the contents of L to [3, 7, 4, 7, 5, 9]. To make this exercise a challenge, you are not allowed to use [].

Note: you don't need to use return.

这是我目前所拥有的,但由于 TypeError: 'int' object is not iterable 而中断。

list = [3, 1, 4, 1, 5, 9]

def replace(list, X, Y):
while X in list:
for i,v in range(len(list)):
if v==1:
list.remove(1)
list.insert(i, 7)

replace(list, 1, 7)

这是我最初的回答,但被拒绝了。

list = [3, 1, 4, 1, 5, 9]

def replace(list, X, Y):
print([Y if v == X else v for v in list])

replace(list, 1, 7)

关于如何修复我的较长解决方案的任何想法?

最佳答案

range() 返回一个简单的整数列表,因此您不能将其解压缩为两个参数。使用 enumerate 获取索引和值元组:

def replace(l, X, Y):
for i,v in enumerate(l):
if v == X:
l.pop(i)
l.insert(i, Y)

l = [3, 1, 4, 1, 5, 9]
replace(l, 1, 7)

如果不允许使用enumerate,请使用普通的旧计数器:

def replace(l, X, Y):
i = 0
for v in l:
if v == X:
l.pop(i)
l.insert(i, Y)
i += 1

l = [3, 1, 4, 1, 5, 9]
replace(list, 1, 7)

最后,您可以使用问题的作者可能正在寻找的内容(即使这是效率最低的方法,因为它在每次迭代时线性搜索列表):

def replace(l, X, Y):
for v in l:
i = l.index(v)
if v == X:
l.pop(i)
l.insert(i, Y)

l = [3, 1, 4, 1, 5, 9]
replace(l, 1, 7)

关于python - 在没有列表理解、切片或使用 [ ] 的情况下替换列表中的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18776420/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com