我正在寻找一个不可迭代的数据集合。
背后的原因是,有一些代码通过将它们添加到新列表然后调用“list.extend”函数来合并多个结果。
我尝试了元组,但它是可迭代的,我正在寻找一个不可迭代的内置集合。
它的作用:
>>> t1 = tuple([1,2,3])
... t2 = tuple([4,5,6])
... l = list()
...
>>> l.extend(t1)
>>> l.extend(t2)
>>>
>>> l
[1, 2, 3, 4, 5, 6]
我想要的是:
[(1,2,3), (4,5,6)]
请记住,我只能更改t1,t2变量....它必须通过范围。
答案 0 :(得分:4)
你的问题不在于元组是可迭代的。使元组不可迭代不会有帮助,因为使用非迭代扩展列表根本不起作用。
>>> l = []
>>> l.extend(1)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'int' object is not iterable
>>>
你需要做的是将你的元组包装在一个列表中:
>>> t1 = (1,2,3)
>>> t2 = (4,5,6)
>>> l.extend([t1])
>>> l.extend([t2])
>>> l
[(1, 2, 3), (4, 5, 6)]
>>>
您还可以同时使用两个元组扩展列表:
>>> l.extend([t1,t2])
>>> l
[(1, 2, 3), (4, 5, 6), (1, 2, 3), (4, 5, 6)]
>>>
答案 1 :(得分:2)
您可以使用列表的追加功能,例如: -
>>> t1 = tuple([1,2,3])
>>> t2 = tuple([4,5,6])
>>> l = list()
>>> l.append(t1)
>>> l.append(t2)
>>> l # [(1,2,3), (4,5,6)]
答案 2 :(得分:0)
你可以创建一个list
的子类,其中extend
和__iadd__
方法被覆盖,所以如果一个元组作为参数传递,它会附加而不是扩展:
class MyList(list):
def __fake_extend(self,other):
if isinstance(other,tuple):
self.append(other)
else:
list.extend(self,other)
def __iadd__(self,other):
self.__fake_extend(other)
return self
def extend(self,other):
self.__fake_extend(other)
t1 = (1,2,3)
t2 = (4,5,6)
l = MyList()
l.extend(t1)
l.extend(t2)
l.extend([4,2,4,5])
print(l)
结果:
[(1, 2, 3), (4, 5, 6), 4, 2, 4, 5]
附加了元组,列表中的项目也是如此(因为它们包含在不是tuple
的列表中)