假设我有一个简单的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
答案 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上列表的长度。