python - 在两个列表之间随机划分项目
问题描述
我必须通过使用类和继承从列表中获取项目并将它们随机附加到两个列表中,所以我不知道如何将它们随机附加到列表中
import random
players = ['a', 'b', 'c','d','e', 'f']
A = []
B = []
teams = []
class Human:
def __init__(self,name):
self.name = name
class Player(Human):
def __init__(self, name, team):
self.team = team
Human.__init__(self, name)
for i in range(6):
p = Player(random.choice(players))
a = p.team
print(p.name)
players.remove(p.name)
print(teams)
解决方案
您的代码将为您提供相同的玩家:
for i in range(6): p = Player(random.choice(players)) # you can draw duplicates here
避免使用random.sample(players, k=len(players))
您的全名(这将返回一个新的、打乱的列表 -players
未修改)或random.shuffle(players)
就地使用。之后,您将结果分为两部分并根据该数据创建团队:
您可能应该重载__repr__(self)
类的方法以使输出更整洁。
import random
class Human:
def __init__(self,name):
self.name = name
def __str__(self):
return f"{self.name}"
def __repr__(self): return str(self)
class Player(Human):
def __init__(self, name, team):
super().__init__(name)
self.team = team
def __str__(self):
return f"{self.name} in team {self.team}"
def __repr__(self): return str(self)
players = ['a', 'b', 'c','d','e', 'f']
random.shuffle(players) # inplace shuffling
player_length = len(players) // 2 # make sure you got even player counts - else uneven teams
A = [Player(k,"A") for k in players[:player_length]] # first 3 are Team A
B = [Player(k,"B") for k in players[player_length:]] # rest is Team B
teams = [A,B]
print(teams)
输出:
[[d in team A, f in team A, b in team A],[a in team B, e in team B, c in team B]]
独库:
推荐阅读
- python - 用标签替换熊猫数据框中的值
- celery - Celery-Flower 添加额外的标签
- ios - Swift 使用 API 请求重构嵌套函数
- python - 如何使用 pysnmp 解析 SNMP 表响应中的 OID 数据?
- java - 为什么关于打印语句的okhttp RequestBody错误
- react-leaflet - 如何在反应传单中访问折线内的标记
- swift - 不断检索到目的地 MapKIt 的时间
- java - 遍历列表并将数字加 1 插入到列表的下一个位置
- google-cloud-platform - 将 PubSub 确认时间增加到 600 秒以上,或者在 pub-sub 中设置火灾并忘记长时间运行的云运行作业
- php - Laravel Validator - 检查是否包含错误键?