[英]Replacing element in list without list comprehension, slicing or using [ ]s
我正在参加这个在线Python课程 ,他们不喜欢使用单行解决方案的学生。 该课程不接受此解决方案的括号。
我已经使用列表理解解决了问题,但课程拒绝了我的答案。
问题是:
使用
index
和其他清单方法,编写一个函数replace(list, X, Y)
它取代所有出现的X
在list
与Y
。 例如,如果L = [3, 1, 4, 1, 5, 9]
则replace(L, 1, 7)
将L
的内容改变为[3, 7, 4, 7, 5, 9]
。 要使此练习成为一项挑战,您不能使用[]
。注意:您不需要使用return。
这是我到目前为止,但由于TypeError而中断:'int'对象不可迭代。
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)
您也可以尝试这个(不要使用[]
s或enumerate()
,如果需要):
for i in range(len(l)): # loop over indices
if l.__index__(i) == X: # i.e. l[i] == X
l.__setitem__(i, Y) # i.e. l[i] = Y
这可能不是作业要求你做的,但我会把它留在这里用于学习目的。
注意:您不应该使用list
作为变量名,因为它已经被内置函数使用。 我在这里用过l
。
如果不允许enumerate
,您还可以使用while
循环。
>>> def replace(L_in, old_v, new_v):
while old_v in L_in:
idx=L_in.index(old_v)
L_in.pop(idx)
L_in.insert(idx, new_v)
>>> L = [3, 1, 4, 1, 5, 9]
>>> replace(L, 1, 7)
>>> L
[3, 7, 4, 7, 5, 9]
不要使用list
作为名称,它会给你带来很大的痛苦。
def replace(my_list, X, Y):
while X in my_list:
my_list.insert(my_list.index(X), Y)
my_list.pop(my_list.index(X))
这对我有用。 挺直的。 可能是一种用较少的线条来实现它的方法,但是基于到目前为止在网站上所教授的内容,这是有效的。
def replace(L, X, Y):
while X in L:
i = L.index(X)
L.insert(i, Y)
L.remove(X)
完全同意Asad Saeeduddin但是,i的第一个值必须为-1,它将有助于替换列表中的第一个对象
def replace(l, X, Y):
i = -1
for v in l:
i += 1
if v == X:
l.pop(i) # remove item at given position (position number i)
l.insert(i, Y) # insert item Y at position i
l = [1, 1, 4, 1, 5, 9]
replace(l, 1, 7)
print(l)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.