为了账号安全,请及时绑定邮箱和手机立即绑定

如何仅在特定索引处加入字符串列表

如何仅在特定索引处加入字符串列表

跃然一笑 2022-07-12 15:24:28
我试图仅在 Python 中的特定索引处将字符串列表中的特定字符串连接在一起。想象一下你有清单['foo', 'bar', 'baz', 'qux', 'quux']我想最终得到以下列表:['foo', 'bar baz', 'qux', 'quux']鉴于字符串列表包含字符串baz。解决此问题的最有效方法是什么?
查看完整描述

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)

我希望这可行,因为它不需要创建新列表


查看完整回答
反对 回复 2022-07-12
?
慕田峪7331174

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循环解决了这个问题。


查看完整回答
反对 回复 2022-07-12
?
神不在的星期二

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)


查看完整回答
反对 回复 2022-07-12
  • 3 回答
  • 0 关注
  • 189 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号