努力使用切片语法来连接列表的一部分的列表元素

时间:2012-03-07 16:53:13

标签: python list

假设我有一个简单的Python列表:

>>> l=['0', '1', '2', '3', '4', '5', '6', '7', '8', '9']

现在假设我想将l[2:6]组合成这样的单个元素:

>>> l
['0', '1', '2345', '6', '7', '8', '9']

我可以逐步进入新列表,如下所示:

>>> l2=l[0:2]
>>> l2.append(''.join(l[2:6]))
>>> l2.extend(l[6:])
>>> l2
['0', '1', '2345', '6', '7', '8', '9']

有没有一种方法(我错过了)在原始列表l上更简单地执行此操作?

修改

像往常一样,Sven Marnach有完美的即时答案:

l[2:6] = ["".join(l[2:6])]

我曾尝试过:

l[2:6] = "".join(l[2:6])

但是没有括号,连接产生的字符串被视为可迭代,将每个字符放回列表并反转连接!

考虑:

>>> l=['abc','def','ghk','lmn','opq']
>>> l[1:3]=[''.join(l[1:3])] 
>>> l
['abc', 'defghk', 'lmn', 'opq']   #correct

>>> l=['abc','def','ghk','lmn','opq']
>>> l[1:3]=''.join(l[1:3])
>>> l
['abc', 'd', 'e', 'f', 'g', 'h', 'k', 'lmn', 'opq']   #not correct

3 个答案:

答案 0 :(得分:11)

使用切片分配:

l[2:6] = ["".join(l[2:6])]

答案 1 :(得分:1)

是的,非常简单:

l[2:6] = [''.join(l[2:6])]

答案 2 :(得分:1)

请务必注意切片分配之间的区别:

>>> a = range(3)
>>> a
[0, 1, 2]
>>> a[1:3] = [4, 5, 6]
>>> a
[0, 4, 5, 6]

EXTENDED切片分配:

>>> a=range(6)
>>> a
[0, 1, 2, 3, 4, 5]
>>> a[::2]
[0, 2, 4]
>>> a[::2]=[-1,-2,-3]
>>> a
[-1, 1, -2, 3, -3, 5]
>>> a[::2]=[-1,-2]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: attempt to assign sequence of size 2 to extended slice of size 3

如果LH是扩展切片,则RH需要是相同长度的序列。常规切片分配可以更改LH上列表的长度。