Python 从pair中获取另一个元素
如果我知道另一个元素,如何从Python3中的元素对(2个元素的列表)中获取一个元素?例如,在基于回合的策略游戏中,我想交换玩家:Python 从pair中获取另一个元素,python,list,python-3.x,Python,List,Python 3.x,如果我知道另一个元素,如何从Python3中的元素对(2个元素的列表)中获取一个元素?例如,在基于回合的策略游戏中,我想交换玩家: players = [playerA, playerB] active_player = playerA players_tmp = list(players) players_tmp.remove(active_player) active_player = players_tmp[0] 这段代码工作得很好,但很难看 当然,在这种特殊情况下,我可以始终存储活
players = [playerA, playerB]
active_player = playerA
players_tmp = list(players)
players_tmp.remove(active_player)
active_player = players_tmp[0]
这段代码工作得很好,但很难看
当然,在这种特殊情况下,我可以始终存储活动玩家的索引(0或1),然后执行以下操作:
self._active_player = 1 - self._active_player
然后编写@property方法。但没那么有趣
有什么好方法吗?这是切换标志的常用方法:
if active_player == playerA:
active_player = playerB
else:
active_player = playerA
这是切换标志的常用方法:
if active_player == playerA:
active_player = playerB
else:
active_player = playerA
对于在一对中查找另一个元素的任务,我只需编写一个简洁明了的函数:
def other_of(pair, item):
a, b = pair
return a if item == b else b
…
active_player = other_of(players, active_player)
但是,如果它适用于您的情况,则可能是循环选择选项的更好方式:
import itertools
player_rotation = itertools.cycle(players)
…
active_player = next(player_rotation)
对于在一对中查找另一个元素的任务,我只需编写一个简洁明了的函数:
def other_of(pair, item):
a, b = pair
return a if item == b else b
…
active_player = other_of(players, active_player)
但是,如果它适用于您的情况,则可能是循环选择选项的更好方式:
import itertools
player_rotation = itertools.cycle(players)
…
active_player = next(player_rotation)
您可以利用
True
可以用作索引1这一事实
>>> l = ['a','b']
>>> l['a' is l[0]]
'b'
>>> l['b' is l[0]]
'a'
因此,您可以将函数定义为
def find(l,i):
return l[i is l[0]]
演示
您可以利用
True
可以用作索引1这一事实
>>> l = ['a','b']
>>> l['a' is l[0]]
'b'
>>> l['b' is l[0]]
'a'
因此,您可以将函数定义为
def find(l,i):
return l[i is l[0]]
演示
当您想更换玩家并使用第一个元素时,只需进行交换即可,这样您就不必关心谁处于活动状态,因为每次都会得到不同的玩家:
players = ["playerA", "playerB"]
players[0],players[1] = players[1],players[0]
active = players[0]
或者更好,正如minitech评论的那样,只需调用列表。反向调用
players = ["playerA", "playerB"]
players.reverse()
active = players[0]
print(active)
playerB
当您想更换玩家并使用第一个元素时,只需进行交换即可,这样您就不必关心谁处于活动状态,因为每次都会得到不同的玩家:
players = ["playerA", "playerB"]
players[0],players[1] = players[1],players[0]
active = players[0]
或者更好,正如minitech评论的那样,只需调用列表。反向调用
players = ["playerA", "playerB"]
players.reverse()
active = players[0]
print(active)
playerB
一个更好的解决方案是有一个发电机
players = ['sdf','asdf','sasd']
active = 'sdf'
temp_players = (player for player in players if player != active)
active = temp_players.next()
通过这种方式,你可以拥有你所有球员的名单,每次都有一名球员替换。
如果一个团队中有多个球员同时比赛,这也会更容易。一个更好的解决方案是使用发电机
players = ['sdf','asdf','sasd']
active = 'sdf'
temp_players = (player for player in players if player != active)
active = temp_players.next()
通过这种方式,你可以拥有你所有球员的名单,每次都有一名球员替换。
如果一个团队中有多个玩家同时进行比赛,这也会变得更容易。使用set
players = {playerA, playerB}
active_player = {playerA}
active_player = players - active_player
或
使用集合
players = {playerA, playerB}
active_player = {playerA}
active_player = players - active_player
或
我建议:
players = ['playerA', 'playerB']
def active_player(): return players[0]
print(active_player())
players.reverse()
print(active_player())
这就产生了:
playerA
playerB
我建议:
players = ['playerA', 'playerB']
def active_player(): return players[0]
print(active_player())
players.reverse()
print(active_player())
这就产生了:
playerA
playerB
为什么要投否决票?这个问题只是想重新分配活动的\u播放器
。为什么要投否决票?问题只是想重新分配活动\u播放机列表。反向
已就位。列表。反向
已就位。您的解决方案看起来不错。由于active_player是一个对象的集合,所以我看到的唯一问题是从集合中检索active_player(而不销毁它)。@splattrutuple(active_player)[0]
@splattru或next(iter(active_player))
您的解决方案看起来不错。由于active_player是一个对象的集合,我看到的唯一问题是从集合中检索active_player(而不销毁它)。@splattrutuple(active_player)[0]
@splattru或next(iter(active_player))