[英]Randomly choosing a tuple set and then removing itself from the orignal tuple list
我一直在尝试.remove()
和del
但是由于某些原因,我无法删除元组...
listpack_list = (["data", "data", "data"], ["test", "test", "test"], ["sof", "sof", "sof"])
我理想情况下想随机选择一个元组列表,例如: ["test", "test", "test"]
将打印第一个变量listpack_list[1][0]
,并将其他两个元素放入变量Main1和Main2中,然后将其自身从listpack_data中删除。
每当它随机选择一个元组集时,它将进行打印并更改变量以将其删除。
关于如何实现此目标的任何指示?
您不能从元组中删除项目,因为它是不可变的。
因此,选择要删除的项目并将必要的值复制到变量
然后使用理解来重建没有该特定元素的元组。
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
首先,正如其他人所说的,元组是不可变的。 您无法就地更改元组,但是可以通过在元组上下标或理解来创建新的元组。
如果您正在谈论对元组中的列表执行操作,请当心,因为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'])
因此,由于不可变元组包含可变列表,因此您可以更改元组内部的内容,但这绝对不是最佳方法。 如果您可以控制实现,则只需在初始步骤中列出列表而不是元组即可。 如果您不这样做,我建议您只使用一种理解来获取列表,然后使用它。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.