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

2024-09-26 18:02:03 发布

您现在位置:Python中文网/ 问答频道 /正文

我一直在尝试.remove()del,但由于某些原因,我无法删除元组。。。你知道吗

listpack_list = (["data", "data", "data"], ["test", "test", "test"], ["sof", "sof", "sof"])

理想情况下,我希望随机选择一个元组列表,例如:["test", "test", "test"]

第一个变量listpack_list[1][0]将被打印,另外两个元素将被放入变量Main1和Main2中,然后它将继续从listpack\u数据中删除自己。你知道吗

每次它随机选择一个元组集时,它都会打印和更改变量。你知道吗

有没有关于我如何做到这一点的建议?你知道吗


Tags: test元素列表data情况原因removelist
2条回答

首先,正如其他人所说,元组是不可变的。不能就地更改元组,但可以通过订阅或理解元组来创建新元组。你知道吗

如果您要对元组中的列表执行操作,请小心,因为Python中的事情在这里会变得很奇怪。你可以用流行音乐把事情搞清楚:

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'])

因此,因为不可变元组包含可变列表,所以可以更改元组中的内容,但这绝对不是最佳方法。如果您可以控制实现,只需在初始步骤创建一个列表列表,而不是元组。如果你不这样做,我建议你用一个理解来得到一个列表,然后用它。你知道吗

  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
    

相关问题 更多 >

    热门问题