我有两个字符串列表,在更好的世界中,它们是一个列表。我需要连接列表,但第一个列表的最后一个元素需要与第二个列表的第一个元素连接。所以这些家伙:
list1 = ["bob", "sal"]
list2 = ["ly", "nigel"]
需要成为
out = ["bob", "sally", "nigel"]
所以这并不难,但我想知道为什么我的一个班轮无效?
out = (list1[-1] += list2.pop(0)) += list2
为什么这不等于
out = list1[-1]+=list2.pop(0)
out += list2
?
我必须通过大约400K记录在很大程度上这样做。所以,如果有人有更好的方法来做到这一点,那么我将不胜感激!
答案 0 :(得分:10)
删除所有+=
运算符,它们在这里没有意义。如果您想将它们用作a.extend(b)
的替代品,请记住,它们不能用作表达式。此命令修改a
列表,但不返回任何内容。因此c = a.extend(b)
不对c
提供任何内容。
试试这个(它甚至不会修改原始列表!):
out = list1[:-1] + [ list1[-1] + list2[0] ] + list2[1:]
返回你想要的东西。
list1[:-1]
是list1中没有最后一个元素的列表。list1[-1]
是list1中的最后一个元素。list2[0]
是list2中的第一个元素。list1[-1] + list2[0]
是一个串联字符串。[ list1[-1] + list2[0] ]
是一个包含一个元素的列表(连接字符串)。list2[1:]
是list2中没有第一个元素的列表。答案 1 :(得分:3)
Python中的赋值不是可以在表达式中使用的运算符。它们是语句级语法。
答案 2 :(得分:0)
如果你想要一个单行,这就是我要做的事情:
(','.join(list1)+','.join(list2)).split(',')
答案 3 :(得分:0)
除了@eumiros回答,关于那里发生的事情,你可以完成你想要的 在单一声明中:
out = list1[:-1] + [list1[-1] + list2[0]] + list2[1:]
“应该有一个 - 最好只有一个 - 显而易见的方法。”
答案 4 :(得分:0)
我通常不会留下破碎的数据,但会修复到位:
>>> list1 = ["bob", "sal"]
>>> list2 = ["ly", "nigel"]
>>> fix = [list1.pop()+list2.pop(0)]
>>> list1
['bob']
>>> fix
['sally']
>>> list2
['nigel']
>>> fixed = list1 + fix + list2
>>> fixed
['bob', 'sally', 'nigel']
同时用可读的东西去掉那些明显的list1和list2变量名。