繁体   English   中英

随机选择一个元组集,然后将其从原始元组列表中删除

[英]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中删除。

每当它随机选择一个元组集时,它将进行打印并更改变量以将其删除。

关于如何实现此目标的任何指示?

  1. 您不能从元组中删除项目,因为它是不可变的。

  2. 因此,选择要删除的项目并将必要的值复制到变量

  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 

首先,正如其他人所说的,元组是不可变的。 您无法就地更改元组,但是可以通过在元组上下标或理解来创建新的元组。

如果您正在谈论对元组中的列表执行操作,请当心,因为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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM