我一直在尝试.remove()
和del
,但出于某种原因,我无法删除元组...
listpack_list = (["data", "data", "data"], ["test", "test", "test"], ["sof", "sof", "sof"])
我理想地想要随机选择一个元组列表,例如:["test", "test", "test"]
将打印第一个变量listpack_list[1][0]
,其他两个元素将被放入变量Main1和Main2中,然后它将继续从listpack_data中删除它。
每当它随机选择一个元组集时,它将执行打印并更改变量删除。
关于如何实现这一点的任何指示?
答案 0 :(得分:3)
您无法从元组中删除项目,因为它是不可变的。
因此,选择要删除的项目并将必要的值复制到变量
然后使用理解重建没有该特定元素的元组。
listpack_list = (["data", "data", "data"], ["test", "test", "test"], ["sof", "sof", "sof"])
import random
rem = random.randrange(3)
varToBePrinted, Main1, Main2 = listpack_list[rem]
listpack_list = tuple(item for index, item in enumerate(listpack_list) if index != rem)
print varToBePrinted
答案 1 :(得分:2)
首先,正如其他人所说,元组是不可改变的。您无法更改元组,但您可以通过下标或理解元组来创建新元组。
如果你正在谈论在元组内部的列表中做事,要小心,因为Python中的东西在这里变得奇怪。你可以用pop清除整个事情:
In [11]: listpack_list = (["data", "data", "data"], ["test", "test", "test"], ["sof", "sof", "sof"])
In [12]: listpack_list[0].pop()
Out[12]: 'data'
In [13]: listpack_list
Out[13]: (['data', 'data'], ['test', 'test', 'test'], ['sof', 'sof', 'sof'])
虽然其他操作似乎失败但仍然有效(!):
In [13]: listpack_list
Out[13]: (['data', 'data'], ['test', 'test', 'test'], ['sof', 'sof', 'sof'])
In [14]: listpack_list[1] += ['test']
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-14-68991a0001f4> in <module>()
----> 1 listpack_list[1] += ['test']
TypeError: 'tuple' object does not support item assignment
In [15]: listpack_list
Out[15]: (['data', 'data'], ['test', 'test', 'test', 'test'], ['sof', 'sof', 'sof'])
因此,因为不可变元组包含可变列表,所以你可以改变元组内部的东西,但这绝对不是最好的方法。如果您可以控制实现,只需在初始步骤中创建列表而不是元组。如果你不这样做,我建议你只需要使用一个理解来获得一个列表然后使用它。