这个循环方法正确吗?Python 3.4.3
所以,我想要一组彼此不同的XY位置。为了做到这一点,我使用了一个列表来存储随机生成的变量XY。如果该职位不在列表中,则会将其添加到列表中,如果该职位在列表中,则会为其重新生成一个职位 我不确定这是否在所有情况下都有效,我想知道是否有更好的方法来做到这一点这个循环方法正确吗?Python 3.4.3,python,loops,python-3.x,location,Python,Loops,Python 3.x,Location,所以,我想要一组彼此不同的XY位置。为了做到这一点,我使用了一个列表来存储随机生成的变量XY。如果该职位不在列表中,则会将其添加到列表中,如果该职位在列表中,则会为其重新生成一个职位 我不确定这是否在所有情况下都有效,我想知道是否有更好的方法来做到这一点 import random positionList = [] for i in range(6): position = [random.randint(0,5),random.randint(0,5)] print("O
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)
重新制作的位置是否与列表中的其他位置相同?重新制作的位置是否与列表中的其他位置相同
是的,因为您使用的是random。如果要确保保留唯一项,可以使用set
对象来实现该目标,从而为您保留唯一项。但请注意,由于列表不是可散列的对象,您应该为成对对象(如元组)使用可散列的容器:
为了确保有6个不同的元素,您可以使用
random.shuffle
:
from random import shuffle
all=[(x,y) for x in range(5) for y in range(5)]
shuffle(all)
print(all[:6])
"""
[(0, 1), (3, 4), (1, 1), (1, 3), (4, 3), (0, 0)]
"""
我刚刚运行了你的代码,它似乎运行得很好。我相信这是正确的。让我们考虑一下while循环。 检查随机生成的“位置”是否已在“位置列表”列表中。这仅仅是一句话:
position in positionList
返回True或False。如果“位置”已出现在列表中,则执行while循环。你只需计算另一个随机位置
我能给出的唯一建议是添加一个循环计数器。当您用尽可能的XY位置时,循环将永远运行。如果您确实需要列表,您可以转换,如果不只是保持代码不变:
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)
vsO(n)
,因为顺序似乎不相关,只使用集合可能就足够了。这是一种方法
import random
my_list =[]
num_of_points = 6
while True:
position = [random.randint(0,5),random.randint(0,5)]
if position not in my_list:
my_list.append(position)
print num_of_points
num_of_points -=1
if (num_of_points == 0):
break
print my_list
当然,您只需要确保可能的随机对的数量超过num_op_points值。顺便说一句,Python 3.0确实不受欢迎。Python3.x的开发已经在3.4版本了years@Slayer您好,没有。我只需要6个不同的XY位置making
positionList=set()
将删除线性查找,您是采样一次还是多次?您还需要使用元组添加到集合中,以便我需要将每个位置转换为元组吗?pos=random.randint(0,5),random.randint(0,5)
,如果pos不在pos\u集合中<代码>位置集。添加(位置)代替您的附件(不是我的附件),但尝试设置([(0,0)、(4,5)、(4,2)、(0,0)、(3,4)、(0,0)])
;)关键是要得到6个唯一的pairs@PadraicCunningham那有什么问题吗?结果将是>>>集([(0,0),(4,5),(4,2),(0,0),(3,4),(0,)])集([(4,5),(4,2),(0,0),(3,4),(0,)])
,但请注意(0,)
在这种情况下是无效的。lol它肯定不会是集([(0,0),(4,5),(4,2),(0,0),(3,4),(0,))
),集合有重复吗?@Padraiccnningham集合理解不能保证集合的长度始终为6。查看更新:)。是的,这正是我想表达的观点;)+1为了看到灯光不用担心,你可以按照kasra的代码循环直到长度为6,我只是让代码尽可能类似于你自己的代码
import random
my_list =[]
num_of_points = 6
while True:
position = [random.randint(0,5),random.randint(0,5)]
if position not in my_list:
my_list.append(position)
print num_of_points
num_of_points -=1
if (num_of_points == 0):
break
print my_list