Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python中的元组和列表排列_Python - Fatal编程技术网

python中的元组和列表排列

python中的元组和列表排列,python,Python,因此,这四个“团队”完成了“目标”的总数: teams = ['W', 'X', 'Y', 'Z'] goals = [4, 5, 1, 9] 现在,如何知道哪个队完成了以下目标 given_goals = [3, 2, 7, 15] 预期答案应采用以下形式: answers = [('W', (2, 3)), ('X', 7), ('Z', 15)] W连续4个进球,因此第2个和第3个进球是他们的。 然后X在W之后连续进了5个球(5-10个),

因此,这四个“团队”完成了“目标”的总数:

teams = ['W', 'X', 'Y', 'Z']
goals = [4, 5, 1, 9]
现在,如何知道哪个队完成了以下目标

given_goals = [3, 2, 7, 15]
预期答案应采用以下形式:

answers = [('W', (2, 3)),
           ('X', 7),
           ('Z', 15)]
W
连续4个进球,因此第2个和第3个进球是他们的。 然后
X
W
之后连续进了5个球(5-10个),所以第7个球是他们的,依此类推

我试过了,但似乎很难:

teams_ = [team for team, goal in zip(teams, goals) for g in range(goal)]

teams_goals = [teams_[g-1] for g in given_goals]
print teams_goals

有更简单的方法吗?

我认为这是最有效的方法:

import bisect
import itertools

teams = ['W', 'X', 'Y', 'Z']
goals = [4, 5, 1, 9]

# Create the max goal of each team
goal_ranges = itertools.accumulate(goals)

# Create sorted tuples of goals and teams (comes sorted because of accumulate)
ordered_teams = list(zip(goal_ranges, teams))

def get_team(goal_number):
    # Get the leftmost occurence of the goal number, and extract the team from the tuple
    return ordered_teams[bisect.bisect_left(ordered_teams, (goal_number,))][1]

你怎么能拿到W的2分和3分?W是4号吗?2+3等于5?你能提供一些额外的例子或问题陈述吗?@BAH,因为W连续4个进球。所以,第二个和第三个进球属于W。我认为基本上是第2个,第3个仍然在4个进球的范围内,所以W进球了。然后X又进了5个球(射程为9),这意味着X总共进了第7个球,依此类推。@BAH准确地说,谢谢你自己的回答,这几乎让我们达到了目标,但我需要导入
defaultdict
以获得你想要的格式,我们似乎只能使用内置的:
teams\u和\u total\u goals=''。加入(团队*团队目标,zip中的目标(团队,目标))
我想在不导入更难的东西的情况下解决它。@jean导入
对分和
itertools
非常常见。它是内置标准库的一部分。我可以帮助编写第二个答案,但我相信这是一种非常有效的方法。可以将其视为使用任何其他内置的方法,如
map()
zip()
(其中
itertools
有一个btw的实现)投票通过,但我希望你的第二个答案能接受,谢谢。+1,我经常使用
itertools
模块,但从未真正使用过
accumulate
;我甚至从未听说过
bisect