以样例输入为例,你input进去的是一个字符串而没办法直接读进一个列表啊。要先预处理一下的
否则你的set(indexlist)里的元素有‘1’~‘8’;和 '[' , ']' 和 ','这几个字符
其次你放在indexset里的都是'1','2'这样的字符串,要用的话得加int
(比如你的index<len(clist))
也还是预处理的问题
假设你已经把它处理成一个理想的列表
那也不行啊
你的算法是把被引量从高到低遍历,直到被引量高于index的篇数即len(clist)也大等于index,这个时候的index就是你想要的结果,因为再往下取len(clist)单增index单减不等式恒成立
所以你最后应该取的是你刚好没放进列表 li 里的那一个index
<注1:注意是index<=len(clite),你用的是小于>
改完的算法部分代码:
def hindex(indexlist):
indexset = sorted(list(set(indexlist)),reverse=True)
for index in indexset:
#记被引用次数大于等于该数的文章
clist = [i for i in indexlist if i >= index]
if index <= len(clist):
return index
test =[1,2,3,4,5,6,7,8]#几组验证用样例
print(hindex(test))
test =[1,2,3,4,5,6,7]
print(hindex(test))
test=[2,3,3,3]
print(hindex(test))
至于怎么得到理想的数字列表
呃我的办法很笨拙,掐头去尾之后转进列表然后重写一个逐个读入重写一个列表
list1=(input()[1:-1]).split(',')
for i in range(len(list1)):
list1[i]=int(list1[i])
print(list1)
希望有人给更好的方法√^◡^