目前我的代码中有这个
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]
而且我不确定我需要多少变量,或者我最终可能需要很多变量。
是否可以创建我需要的变量列表,然后循环遍历每个变量并执行此操作?
我不确定如何解决这个问题。
答案 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]