Python中如何移除列表末尾的(None,)元组?
解决Python列表移除末尾单元素None元组的问题
哈哈,你这是把删除的范围搞反啦!让我给你捋清楚问题出在哪,再给你几个精准的解决办法:
为什么你的操作得到了相反的结果?
你用的del mylist[:-1],这里的mylist[:-1]表示从列表开头到倒数第二个元素的切片,执行del操作后等于把前面所有有效元素都删掉了,自然就只剩下最后那个(None,)元组啦,完全搞反了操作对象。
正确的解决方法
方法1:直接切片生成新列表
如果你想保留原列表,生成一个新的目标列表,直接取除最后一个元素外的所有内容就行:
mylist = [('Needie', 83, 55, 78, None), ('Blue', 80, 60, None, 66), ('Bloodnok', None, 54, 57, 59), (None,)] newlist = mylist[:-1] print(newlist) # 输出:[('Needie', 83, 55, 78, None), ('Blue', 80, 60, None, 66), ('Bloodnok', None, 54, 57, 59)]
方法2:直接在原列表上删除最后一个元素
如果不需要保留原列表,想直接修改它,就删除列表的最后一个元素:
mylist = [('Needie', 83, 55, 78, None), ('Blue', 80, 60, None, 66), ('Bloodnok', None, 54, 57, 59), (None,)] del mylist[-1] print(mylist) # 输出和上面一致
方法3:更通用的过滤(适用于任意位置的单元素None元组)
如果你的场景里,这种只包含None的单元素元组不一定在末尾,而是可能出现在列表任意位置,用列表推导式过滤会更灵活:
mylist = [('Needie', 83, 55, 78, None), (None,), ('Blue', 80, 60, None, 66), ('Bloodnok', None, 54, 57, 59)] newlist = [item for item in mylist if not (len(item) == 1 and item[0] is None)] print(newlist) # 输出:[('Needie', 83, 55, 78, None), ('Blue', 80, 60, None, 66), ('Bloodnok', None, 54, 57, 59)]
内容的提问来源于stack exchange,提问作者Jim Ye
相关产品推荐
相关产品推荐

