Python 循环直到对列表满意为止
这是我用来生成包含n个成员和x个组的组的代码。然后根据每组中有多少相似的数字对每组进行评分,例如:(1,1,1,1)=1,因为只有1个数字,但是(1,2,3,3)=3,因为有3个数字。我试着在上面打个圈,直到这个地方的9组中的任何一组的速率低于某个z值,但是由于某种原因,它不起作用。有人能根据最后的评分数字提出一种循环该系统的方法吗Python 循环直到对列表满意为止,python,loops,grouping,Python,Loops,Grouping,这是我用来生成包含n个成员和x个组的组的代码。然后根据每组中有多少相似的数字对每组进行评分,例如:(1,1,1,1)=1,因为只有1个数字,但是(1,2,3,3)=3,因为有3个数字。我试着在上面打个圈,直到这个地方的9组中的任何一组的速率低于某个z值,但是由于某种原因,它不起作用。有人能根据最后的评分数字提出一种循环该系统的方法吗 import numpy import math import random members=4 n_groups =4 participants=list(ran
import numpy
import math
import random
members=4
n_groups =4
participants=list(range(1,members+1))*n_groups
#print participants
random.shuffle(participants)
with open('myfile1.txt','w') as tf:
for i in range(n_groups):
group = participants[i*members:(i+1)*members]
for participant in group:
tf.write(str(participant)+' ')
tf.write('\n')
with open('myfile1.txt','r') as tf:
g = [list(map(int, line.split())) for line in tf.readlines()]
print(g)
my_groups =g
def get_rating(group):
return len(set(group))
for each_grp in my_groups:
print(get_rating(each_grp))
这种情况下的输出:
[[1, 4, 2, 3], [3, 4, 4, 2], [1, 1, 2, 3], [3, 4, 2, 1]]
4.
3.
3.
四,
我将其简化为4人4组:
[1,4,2,3],[3,4,4,2],[1,1,2,3],[3,4,2,1]]
4(因为第1组有4个不同的数字)
3(因为第2组有3个不同的数字)
3(因为第3组有3个不同的数字)
4(因为第4组有4个不同的数字)
方括号中的东西是4组,下面的4个数字给它打分。我试图得到一个循环,它会一直尝试,直到最后每组的4个评分数字中有一个下降到1,然后停止
因此,我需要一个循环,该循环将不断生成新的组,直到组下面的评分数字(在本例中为:4,3,4)低于某个特定值,如2,2,2一种有点幼稚的方法是将整个程序包装成一个while循环,用于检查所有组的分数。比如:
# WARNING, UNTESTED CODE
my_groups = []
while any([get_rating(g) for g in groups] lambda x: x < 2):
# ...Do e'rythang else...
#警告,未测试代码
我的团队=[]
而任何([g组中g的get_评级(g)]λx:x<2):
#…做其他事情。。。
一个更明智的方法是逐个查看您的组,并在每次编写之前获得评分
*使用工作代码更新*
import numpy
import math
import random
members=4
n_groups =4
participants=list(range(1,members+1))*n_groups
#print participants
random.shuffle(participants)
def get_rating(group):
return len(set(group))
with open('myfile1.txt','w') as tf:
for i in range(n_groups):
group = participants[i*members:(i+1)*members]
# right here
while(get_rating(group) < 2):
# Do it again
random.shuffle(participants)
group = participants[i*members:(i+1)*members]
# now right it
for participant in group:
tf.write(str(participant)+' ')
tf.write('\n')
with open('myfile1.txt','r') as tf:
g = [list(map(int, line.split())) for line in tf.readlines()]
print(g)
my_groups =g
for each_grp in my_groups:
print(get_rating(each_grp))
导入numpy
输入数学
随机输入
成员=4
n_组=4
参与者=列表(范围(1,成员+1))*n_组
#打印参与者
随机。随机(参与者)
def get_评级(组):
回程透镜(组)
以open('myfile1.txt','w')作为tf:
对于范围内的i(n_组):
组=参与者[i*成员:(i+1)*成员]
#就在这里
而(获得_评级(组)<2):
#再做一次
随机。随机(参与者)
组=参与者[i*成员:(i+1)*成员]
#现在就这样
对于团体中的参与者:
tf.write(str(参与者)+'')
tf.write(“\n”)
以open('myfile1.txt','r')作为tf:
g=[tf.readlines()中的行的列表(map(int,line.split())]
印刷品(g)
my_群=g
对于my_组中的每个_grp:
打印(获得额定值(每个额定值))
一种有点幼稚的方法是将整个程序包装成一个while循环,用于检查所有组的分数。比如:
# WARNING, UNTESTED CODE
my_groups = []
while any([get_rating(g) for g in groups] lambda x: x < 2):
# ...Do e'rythang else...
#警告,未测试代码
我的团队=[]
而任何([g组中g的get_评级(g)]λx:x<2):
#…做其他事情。。。
一个更明智的方法是逐个查看您的组,并在每次编写之前获得评分
*使用工作代码更新*
import numpy
import math
import random
members=4
n_groups =4
participants=list(range(1,members+1))*n_groups
#print participants
random.shuffle(participants)
def get_rating(group):
return len(set(group))
with open('myfile1.txt','w') as tf:
for i in range(n_groups):
group = participants[i*members:(i+1)*members]
# right here
while(get_rating(group) < 2):
# Do it again
random.shuffle(participants)
group = participants[i*members:(i+1)*members]
# now right it
for participant in group:
tf.write(str(participant)+' ')
tf.write('\n')
with open('myfile1.txt','r') as tf:
g = [list(map(int, line.split())) for line in tf.readlines()]
print(g)
my_groups =g
for each_grp in my_groups:
print(get_rating(each_grp))
导入numpy
输入数学
随机输入
成员=4
n_组=4
参与者=列表(范围(1,成员+1))*n_组
#打印参与者
随机。随机(参与者)
def get_评级(组):
回程透镜(组)
以open('myfile1.txt','w')作为tf:
对于范围内的i(n_组):
组=参与者[i*成员:(i+1)*成员]
#就在这里
而(获得_评级(组)<2):
#再做一次
随机。随机(参与者)
组=参与者[i*成员:(i+1)*成员]
#现在就这样
对于团体中的参与者:
tf.write(str(参与者)+'')
tf.write(“\n”)
以open('myfile1.txt','r')作为tf:
g=[tf.readlines()中的行的列表(map(int,line.split())]
印刷品(g)
my_群=g
对于my_组中的每个_grp:
打印(获得额定值(每个额定值))
您也可以使用numpy
进行此操作
将numpy导入为np
def get_组(成员,n_组):
返回np.random.randint(1,5,(n_组,成员))
g=获取组(4,4)
虽然在[np.unique(sub_g.)中不是1,但对于sub_g,形状[0]:
g=获取组(4,4)
其中:
np.random.randint(1,5(n_组,成员))
生成n_组
长度成员的组
填充范围(1,5)
np.unique(sub_g).shape[0]
获取您的评分(组中唯一值的数量)[np.unique(sub_g)。g中sub_g的形状[0]
为g中的每个组重复前面的步骤
while not 1 in
重复循环,直到在上面计算的列表中找到值1
(一组中的所有值都相等)g=get_组(4,4)
重复步骤1您也可以使用
numpy
进行此操作
将numpy导入为np
def get_组(成员,n_组):
返回np.random.randint(1,5,(n_组,成员))
g=获取组(4,4)
虽然在[np.unique(sub_g.)中不是1,但对于sub_g,形状[0]:
g=获取组(4,4)
其中:
np.random.randint(1,5(n_组,成员))
生成n_组
长度成员的组
填充范围(1,5)
np.unique(sub_g).shape[0]
获取您的评分(组中唯一值的数量)[np.unique(sub_g)。g中sub_g的形状[0]
为g中的每个组重复前面的步骤
while not 1 in
重复循环,直到在上面计算的列表中找到值1
(一组中的所有值都相等)g=get_组(4,4)
重复步骤1我运行了这个,我无法理解与您的问题相关的输出。这里到底有什么不起作用?它应该是什么样子?给我们看一些输入和输出示例。使用SampleIt编辑它一切正常,但我想添加一个循环,直到底部评级系统中的数字为某个数字,例如2>仍然不清楚。A.