【发布时间】:2020-04-30 03:23:56
【问题描述】:
我正在创建一个 .txt 文件,其中包含一个团队中的四名士兵,他们按照功绩的顺序相互排名。士兵不给自己排名。
我有以下代码:
import itertools
# create a list of 4 soldiers
numSoldiers=4
soldiers = []
for i in range(1,numSoldiers+1):
soldiers.append('soldier'+str(i))
# create list of all permutations of 2 soldiers
perms = list(itertools.permutations(soldiers, 2))
# list of possible rankings (soldier does not rank himself/herself)
possRanks = list(range(1,len(soldiers)))
# create the edgelist .txt file with randomized rankings
open('peerRankingsEdgelist.txt', 'w').close() #delete contents of .txt file at the start
file = open('peerRankingsEdgelist.txt', 'w')
for i in perms:
file.write(i[0] + ', ' + i[1] + '\n')
file.close() #close file
在 .txt 文件中生成以下输出:
soldier1, soldier2
soldier1, soldier3
soldier1, soldier4
soldier2, soldier1
soldier2, soldier3
soldier2, soldier4
soldier3, soldier1
soldier3, soldier2
soldier3, soldier4
soldier4, soldier1
soldier4, soldier2
soldier4, soldier3
对于每组三行(以相同soldier 开头的行组),我想添加一个来自possRanks 的随机排名,其中possRanks = [1, 2, 3]。问题是我不能完全随机化它,因为那样排名可能会重复。例如,soldier1 可能同时对soldier2 和soldier3 进行排名,排名为1,这是我做不到的。
正确的示例输出如下:
soldier1, soldier2, 3
soldier1, soldier3, 1
soldier1, soldier4, 2
soldier2, soldier1, 1
soldier2, soldier3, 2
soldier2, soldier4, 3
soldier3, soldier1, 2
soldier3, soldier2, 1
soldier3, soldier4, 3
soldier4, soldier1, 1
soldier4, soldier2, 2
soldier4, soldier3, 3
在这里,soldier1 将 soldier2 的值 3、soldier3 的值 1 和 soldier4 的值的 2 排名。
【问题讨论】:
-
问题是什么?
-
如何在 .txt 文件中的每三行中附加一个随机的、非重复的排名从
possRanks到每组三行? -
random.shuffle在这里很有用。 -
这能回答你的问题吗? Pick N distinct items at random from sequence of unknown length, in only one iteration ...还有其他可能的答案搜索
python choose random items from a list without repeating site:stackoverflow.com的变体
标签: python random text itertools edge-list