3 回答
TA贡献1827条经验 获得超9个赞
index = 2
ss = ['foo','bar','far','car','sar']
ss[index] = ' '.join(ss[index:index+2])
ss.pop(index+1)
print(ss)
我希望这可行,因为它不需要创建新列表
TA贡献1828条经验 获得超13个赞
i = 0
while i < len(s):
print(s[i])
if s[i] == 'baz' and i != 0:
s[i - 1] += ' '
s[i - 1] += ''.join(s[i])
s.pop(i)
i = i - 1
i = i + 1
上面的代码遍历列表,在找到 'baz' 的地方,它将 'baz' 连接到前面的元素。这无法使用 for 循环、 byfor i in s或来实现for i in range(len(s))。在代码中,由于 s.pop() 导致 len(s) 发生变化,因此i = i - 1是必要的,但for i in range(len(s))不允许更改 i 的值,因为它固定为从 0 变为 len(s)。对于为什么不使用 for 循环有任何疑问,请考虑以下代码:-
for i in range(len(s)):
print(s[i])
if s[i] == 'baz':
s.pop(i)
i = i - 1
这输出
foo
bar
baz
quux
---------------------------------------------------------------------------
IndexError Traceback (most recent call last)
<ipython-input-223-8034ffc6ca03> in <module>()
1 for i in range(len(s)):
----> 2 print(s[i])
3 if s[i] == 'baz':
4 s.pop(i)
5 i = i - 1
IndexError: list index out of range
可以看出,它并没有遍历所有元素。由于 s.pop(),len(s) 减少到 4,s[3] 变成了 'quux',而不是 'qux'。尽管 i 存在i - 1,但它会引发错误。因此,while循环解决了这个问题。
TA贡献1963条经验 获得超6个赞
你可以试试这个:
>>> l = ['foo', 'bar', 'baz', 'qux', 'quux']
>>> index = 2
>>> l[index - 1] = f'{l[index-1]} {l.pop(index)}'
>>> l
['foo', 'bar baz', 'qux', 'quux']
定时:
382 ns ± 0.455 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)
添加回答
举报
