如何以编程方式创建和移动列表
How to programmatically create and shift list
目前我的代码中有这个
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]
而且我不确定我需要多少变量,或者我最终可能需要很多变量。
是否可以创建一个我需要的变量列表,然后循环遍历每个变量并执行此操作?
我不太确定如何解决这个问题。
向 python 中的列表添加值是通过 append() 或 extend() 完成的。将项目列表附加到列表会将新列表放在现有列表的末尾,而扩展列表会将扩展列表的每个新项目放在现有列表的底部。
例如,如果您不确定列表中最终还需要多少项目,您可以创建一个函数,用任意数量的元素扩展它们:
>>> 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]
你正在做的事情叫做 "one-hot encoding",你可以很容易地做到这一点。
首先,为您的 "variables" 构建一个字典,但不要将每个都写成 [0,0,0,1]
,只需写下它们的索引即可。或者更好的是,使用索引列表来存储他们的名字:
mylist = ['up','down','left','right']
然后,定义一个函数,它接受该列表/字典和 "variable" 数字(实际上是该字典中的键,或列表中的项目)并输出正确的 "one-hot"编码:
def onehot(mylist, key):
index = mylist.index(key)
zeros = [0 for i in mylist]
zeros[index] = 1
return zeros
现在,如果您的列表如上所示,运行ning 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]
目前我的代码中有这个
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]
而且我不确定我需要多少变量,或者我最终可能需要很多变量。
是否可以创建一个我需要的变量列表,然后循环遍历每个变量并执行此操作?
我不太确定如何解决这个问题。
向 python 中的列表添加值是通过 append() 或 extend() 完成的。将项目列表附加到列表会将新列表放在现有列表的末尾,而扩展列表会将扩展列表的每个新项目放在现有列表的底部。
例如,如果您不确定列表中最终还需要多少项目,您可以创建一个函数,用任意数量的元素扩展它们:
>>> 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]
你正在做的事情叫做 "one-hot encoding",你可以很容易地做到这一点。
首先,为您的 "variables" 构建一个字典,但不要将每个都写成 [0,0,0,1]
,只需写下它们的索引即可。或者更好的是,使用索引列表来存储他们的名字:
mylist = ['up','down','left','right']
然后,定义一个函数,它接受该列表/字典和 "variable" 数字(实际上是该字典中的键,或列表中的项目)并输出正确的 "one-hot"编码:
def onehot(mylist, key):
index = mylist.index(key)
zeros = [0 for i in mylist]
zeros[index] = 1
return zeros
现在,如果您的列表如上所示,运行ning 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]