所以,我想要一组彼此不同的XY位置。为了做到这一点,我使用了一个列表来存储随机生成的变量XY。如果该位置不在列表中,它将被添加到它中,如果它在列表中,那么它将为它重新创建一个位置。
我不确定这是否适用于所有情况,并想知道是否有更好的方法。
import random
positionList = []
for i in range(6):
position = [random.randint(0,5),random.randint(0,5)]
print("Original", position)
while position in positionList:
position = [random.randint(0,5),random.randint(0,5)]
positionList.append(position)
print(position)
重拍位置可能与列表中的其他位置相同吗?
答案 0 :(得分:2)
重拍位置可能与列表中的其他位置相同吗?
是的,因为您使用的是随机的。如果您想确保保留唯一项目,可以使用set
对象实现该目标,为您保留唯一项目。但请注意,由于列表不是可清除对象,因此您应该使用可容纳的容器(如元组):
>>> position_set = set()
>>>
>>> while len(position_set) != 6:
... position = (random.randint(0,5), random.randint(0,5))
... position_set.add(position)
...
>>> position_set
set([(3, 2), (5, 0), (2, 5), (5, 2), (1, 0), (3, 5)])
答案 1 :(得分:1)
如果你真的需要列表,你可以转换,如果不是只保留代码:
import random
position_set = set()
for i in range(6):
position = random.randint(0, 5), random.randint(0, 5)
print("Original", position)
while position in position_set:
position = random.randint(0, 5), random.randint(0, 5)
position_set.add(position)
print(position)
print(position_set)
对于列表,设置查找为O(1)
vs O(n)
,因为顺序似乎无关紧要,只需使用一个集合就足够了。
答案 2 :(得分:0)
我只是运行你的代码,它似乎工作得很好。我相信这是正确的。让我们考虑你的while循环。
您检查随机生成的“#”位置'已经在' positionList'名单。仅仅是声明:
position in positionList
返回True或False。如果'位置'已经出现在列表中,while循环被执行。而你只是计算另一个随机位置。
我唯一能给出的建议是添加一个循环计数器。当你用尽可能的XY位置时,循环会永远运行。