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

时间:2013-12-20 04:48:15

标签: python list python-2.7 tuples

我一直在尝试.remove()del,但出于某种原因,我无法删除元组...

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

我理想地想要随机选择一个元组列表,例如:["test", "test", "test"]

将打印第一个变量listpack_list[1][0],其他两个元素将被放入变量Main1和Main2中,然后它将继续从listpack_data中删除它。

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

关于如何实现这一点的任何指示?

2 个答案:

答案 0 :(得分:3)

  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
    

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

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