创建意外的元组值
Creation of unexpected tuple value
我正在处理一个有点神秘的问题,希望得到一些澄清。我写了一个脚本来查找骰子掷骰组合加 24,如下所示:
start=[3,3,3,3,3,3,3,3]
outcomes=set(tuple(start)) #Use a set to ensure uniqueness
index_list=np.random.randint(0,8,1000)
#This little snippet adds one and subtracts one randomly, keeping total at 24
for i in xrange(0,500):
upper=index_list[i]
downer=index_list[i+20]
if start[upper]!=6 and start[downer]!=1:
start[upper]=start[upper]+1
start[downer]=start[downer]-1
outcomes.add(tuple(start))
print outcomes
我 运行 喜欢的是,当我查看结果时,那里有一个 'int' 类型的 3。
set([(4, 4, 4, 3, 2, 2, 2, 3), 3, (2, 5, 4, 3, 1, 4, 2, 3), (4, 4, 4, 2, 3, 1, 3, 3),(4, 2, 5, 2, 3, 4, 1, 3)])
虽然我当然可以删除它,但我只是好奇它是如何进入那里的?我最初的猜测是索引列表可能会生成 [0-7] 之外的索引,但事实并非如此。我在其他地方寻找过类似的问题,但尚未找到类似的问题。谢谢!
set
需要一个可迭代对象。您正在传递一个 tuple
,它是一个可迭代的。
set
遍历它,只留下 1 个值:3(因为你的元组只包含相同的 3 个值)。
您必须将您的元素放在列表或元组中,以便它被视为单个元素(当您传递一个字符串并且它被意外迭代时,完全相同的问题)
你的其余代码没有问题,与问题无关。
改为这样做:
outcomes=set([tuple(start),])
现在 set
遍历 1 个元组的列表,有效地创建 tuple
个元素。
你也可以这样做,也许更简单:
outcomes=set()
outcomes.add(tuple(start))
没有歧义,因为您要添加 1 个元素。没有遍历。
我正在处理一个有点神秘的问题,希望得到一些澄清。我写了一个脚本来查找骰子掷骰组合加 24,如下所示:
start=[3,3,3,3,3,3,3,3]
outcomes=set(tuple(start)) #Use a set to ensure uniqueness
index_list=np.random.randint(0,8,1000)
#This little snippet adds one and subtracts one randomly, keeping total at 24
for i in xrange(0,500):
upper=index_list[i]
downer=index_list[i+20]
if start[upper]!=6 and start[downer]!=1:
start[upper]=start[upper]+1
start[downer]=start[downer]-1
outcomes.add(tuple(start))
print outcomes
我 运行 喜欢的是,当我查看结果时,那里有一个 'int' 类型的 3。
set([(4, 4, 4, 3, 2, 2, 2, 3), 3, (2, 5, 4, 3, 1, 4, 2, 3), (4, 4, 4, 2, 3, 1, 3, 3),(4, 2, 5, 2, 3, 4, 1, 3)])
虽然我当然可以删除它,但我只是好奇它是如何进入那里的?我最初的猜测是索引列表可能会生成 [0-7] 之外的索引,但事实并非如此。我在其他地方寻找过类似的问题,但尚未找到类似的问题。谢谢!
set
需要一个可迭代对象。您正在传递一个 tuple
,它是一个可迭代的。
set
遍历它,只留下 1 个值:3(因为你的元组只包含相同的 3 个值)。
您必须将您的元素放在列表或元组中,以便它被视为单个元素(当您传递一个字符串并且它被意外迭代时,完全相同的问题)
你的其余代码没有问题,与问题无关。
改为这样做:
outcomes=set([tuple(start),])
现在 set
遍历 1 个元组的列表,有效地创建 tuple
个元素。
你也可以这样做,也许更简单:
outcomes=set()
outcomes.add(tuple(start))
没有歧义,因为您要添加 1 个元素。没有遍历。