[英]python: “while (len(list1)>0) or (len(list2)>0)” doesn't work
[英]why doesn't (list1[-1]+=list2.pop(0))+=list2 work in Python?
我有两个字符串列表,在一个更好的世界中,它将是一个列表。 我需要串联列表,但是第一个列表的最后一个元素需要与第二个列表的第一个元素串联。 所以这些家伙:
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
?
我必须通过大约40万条记录来完成大部分时间。 因此,如果有人有更好的方法来做到这一点,那么我将不胜感激!
删除所有那些+=
运算符,它们在这里没有意义。 如果要使用它们代替a.extend(b)
,请记住,它们不能用作表达式。 此命令修改了a
列表,但不返回任何东西。 所以c = a.extend(b)
对c
没有任何作用。
请尝试以下操作(它甚至不会修改原始列表!):
out = list1[:-1] + [ list1[-1] + list2[0] ] + list2[1:]
返回您想要的。
list1[:-1]
是list1中没有最后一个元素的列表。 list1[-1]
是list1[-1]
中的最后一个元素。 list2[0]
是list2[0]
中的第一个元素。 list1[-1] + list2[0]
是连接的字符串。 [ list1[-1] + list2[0] ]
是具有一个元素(串联字符串)的列表。 list2[1:]
是list2中没有第一个元素的列表。 Python中的赋值不是可在表达式中使用的运算符。 它们是语句级语法。
如果您想要单线飞机,这是我要做的:
(','.join(list1)+','.join(list2)).split(',')
除了@eumiros答案以外,您还可以在其中通过以下语句完成所要发生的事情:
out = list1[:-1] + [list1[-1] + list2[0]] + list2[1:]
“应该有一种-最好只有一种-显而易见的方法。”
我通常不会留下零碎的数据,但会修复到位:
>>> 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变量名称,并具有可读性。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.