在我的家庭作业中真的坚持这个问题。
一切正常,但' '
中有空格(p
)。我需要停止创建can
。
例如,如果我提交:
rankedVote("21 4", [('AB', '132'), ('C D', ''), ('EFG', ''), ('HJ K', '2 1')])
我想:
['C D', 'AB']
返回,而不仅仅是现在的[]
。
代码如下:
def rankedVote(p,cs):
candsplit = zip(*cs)
cand = candsplit[0]
vote = list(p)
ppl = vote
can = list(p)
for i in range(len(vote)):
if ' ' in vote[i-1]:
return []
else:
vote[i] = int(vote[i])
can[vote[i]-1] = cand[i]
for i in range(len(vote)):
for j in range(len(vote)):
if i != j:
if vote[i] == vote[j]:
return []
return can
修改
在示例中:
rankedVote("21 4", [('AB', '132'), ('C D', ''), ('EFG', ''), ('HJ K', '2 1')])
这意味着第1,AB
成为第2,
第二个C D
成为第一个,
它应该停止因为第3个不存在。
我们说21 4
代替2143
而不是EFG
。
这意味着第3个HJ K
将是第4个,
第4个{{1}}将是第3个。
答案 0 :(得分:0)
代码按照您的指示行事我会说。请看下面的代码块:
if ' ' in vote[i-1]:
return []
答案 1 :(得分:0)
我知道这个问题很老,但我发现它很有趣。
就像previous answer所说的那样,到目前为止你没有返回列表,你正在返回[]
。
你应该做的是:
if ' ' in vote[i]:
return can[:i]
此外,由于您似乎知道如何使用zip
,您也可以这样做:
def rankedVote(p,cs):
cand = zip(*cs)[0]
# get elements before ' '
votes = p.split()[0] # '21'
# map votes index order with corresponding list order
# (number of `cands` is determined by length of `votes`)
cans = zip(votes, cand) # [('2', 'AB'), ('1', 'C D')]
# Sort the results and print only the cands
result = [can for vote, can in sorted(cans)] # ['C D', 'AB']
return result
输出:
>> rankedVote("21 4", [('AB', '132'), ('C D', ''), ('EFG', ''), ('HJ K', '2 1')])
['C D', 'AB']
>> rankedVote("2143", [('AB', '132'), ('C D', ''), ('EFG', ''), ('HJ K', '2 1')])
['C D', 'AB', 'HJ K', 'EFG']