如何以编程方式创建和转移列表

时间:2017-07-05 09:19:17

标签: python python-3.6

目前我的代码中有这个

up = [1, 0, 0, 0]
down = [0, 1, 0, 0]
left = [0, 0, 1, 0]
right = [0, 0, 0, 1]

我想添加另一个我需要知道的变量

up = [1, 0, 0, 0, 0]
down = [0, 1, 0, 0, 0]
left = [0, 0, 1, 0, 0]
right = [0, 0, 0, 1, 0]
a = [0, 0, 0, 0, 1]

而且我不确定我需要多少变量,或者我最终可能需要很多变量。

是否可以创建我需要的变量列表,然后循环遍历每个变量并执行此操作?

我不确定如何解决这个问题。

2 个答案:

答案 0 :(得分:1)

您正在做的事情被称为"单热编码",您可以轻松地做到这一点。 首先,构建一个"变量"的字典,但不要将每个字母写为[0,0,0,1],只需编写它们的索引即可。或者更好的是,使用索引列表来存储他们的名字:

mylist = ['up','down','left','right']

然后,定义一个获取该列表/字典和"变量"的函数。数字(这是该字典中的关键字,或列表中的项目)并输出正确的" one-hot"编码:

def onehot(mylist, key):
    index = mylist.index(key)
    zeros = [0 for i in mylist]
    zeros[index] = 1
    return zeros

现在,如果您的列表与上面所示相同,则运行onehot(mylist, 'up')将输出[1,0,0,0]。如果您决定随时扩展该列表,则可以运行mylist.append('newname')并再次运行我们的小助手 - onehot(mylist, 'newname')将输出[0,0,0,0,1]

另一种实现是在单个列表理解中完成所有工作。查找索引可能代价高昂(因为 O(n)),因为必须逐个元素地搜索列表。将此减少到一次通过可以降低复杂性:

def onehot(mylist, key):
    return [int(i == key) for i in mylist]

答案 1 :(得分:-1)

使用append()或extend()在python中向列表中添加值。将列表添加到列表中会将新列表放在现有列表的末尾,而扩展列表会将扩展列表的每个新项目放在现有列表的底部。

例如,如果您不确定列表中最终需要多少项目,则可以创建一个使用任意数量的元素扩展它们的函数:

>>> up = [1, 0, 0, 0]
>>> down = [0, 1, 0, 0]
>>> left = [0, 0, 1, 0]
>>> right = [0, 0, 0, 1]
>>> def extend_list(list, items):
...     return list.extend(items)
...
>>> extend_list(up, [0])
>>> print(up)
[1, 0, 0, 0, 0]
>>> extend_list(down, [0,1])
>>> print(down)
[0, 1, 0, 0, 0, 1]