为什么不(list1 [-1] + = list2.pop(0))+ = list2在Python中工作?

时间:2010-10-26 13:52:54

标签: python list

我有两个字符串列表,在更好的世界中,它们是一个列表。我需要连接列表,但第一个列表的最后一个元素需要与第二个列表的第一个元素连接。所以这些家伙:

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记录在很大程度上这样做。所以,如果有人有更好的方法来做到这一点,那么我将不胜感激!

5 个答案:

答案 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变量名。