在编译这个贪婪算法时有问题';s python问题

在编译这个贪婪算法时有问题';s python问题,python,list,algorithm,greedy,Python,List,Algorithm,Greedy,我在尝试这个问题,这是一个贪婪的算法问题。庆祝派对的问题。 当我运行它时,正如您在下面看到的,它说列表索引必须是整数。。 你能帮我一下吗?我对算法编码还不熟悉。 我也愿意接受更好和有效的解决方案 问题: a=[1,5.4,2.1,3.4,3.1,2.0,1.8,8.9,10,23,4,5,5,2,1.6,1.9] a、 排序() q=0 z={} 对于范围内的i(len(a)): 如果(a[q]+1.0)>=a[i]: 如果q不在z.keys()中: z[q]=[] z[q].追加(a[i])

我在尝试这个问题,这是一个贪婪的算法问题。庆祝派对的问题。 当我运行它时,正如您在下面看到的,它说列表索引必须是整数。。 你能帮我一下吗?我对算法编码还不熟悉。 我也愿意接受更好和有效的解决方案

问题:

a=[1,5.4,2.1,3.4,3.1,2.0,1.8,8.9,10,23,4,5,5,2,1.6,1.9]
a、 排序()
q=0
z={}
对于范围内的i(len(a)):
如果(a[q]+1.0)>=a[i]:
如果q不在z.keys()中:
z[q]=[]
z[q].追加(a[i])
其他:
q=a[i]
如果q不在z.keys()中:
z[q]=[]
z[q].追加(a[i])
---------------------------------------------------------------------------
TypeError回溯(最近一次调用上次)
在里面
4 z={}
5对于范围内的i(len(a)):
---->6如果(a[q]+1.0)>=a[i]:
7如果q不在z.键()中:
8 z[q]=[]

TypeError:列表索引必须是整数或切片,而不是在
块的开头浮动
,否则
q=a[i]
。由于在
a
中有浮点数,在循环中的某个点,q被设置为浮点数。即使该浮点值类似于2.0,当您尝试将其用作列表的索引时,python仍然会引发错误。要解决此问题,您需要从列表中删除所有浮动
a

问题在于将q分配给a中的值后使用q

a=[1,5.4,2.1,3.4,3.1,2.0,1.8,8.9,10,23,4,5,5,2,1.6,1.9]
a.sort()
q=0
z={}
for i in range(len(a)):
    if (a[q]+1.0)>=a[i]: # this is the problem that you have an error
        if q not in z.keys():
            z[q]=[]
        z[q].append(a[i])
    else:
        q=a[i] #here you are assigned the value to q, which can be a float
        if q not in z.keys():
            z[q]=[]
        z[q].append(a[i])
当您检查
if(a[q]+1.0)>=a[i]
时,它将获取列表
a
,并使用值
q
检查索引。由于该值可以是浮点值,所以可能会出现错误,因为索引必须是int

您可以更改循环以跟踪索引:

a=[1,5.4,2.1,3.4,3.1,2.0,1.8,8.9,10,23,4,5,5,2,1.6,1.9]
a.sort()
q=0
qidx=0
z={}
for i in range(len(a)):
    if (a[qidx]+1.0)>=a[i]:
        if q not in z.keys():
            z[q]=[]
        z[q].append(a[i])
    else:
        q=a[i]
        qidx = i
        if q not in z.keys():
            z[q]=[]
        z[q].append(a[i])
哪个会输出

{0: [1, 1.6, 1.8, 1.9, 2.0, 2], 2.1: [2.1, 3.1], 3.4: [3.4, 4], 5: [5, 5, 5.4], 8.9: [8.9], 10: [10], 23: [23]}

你能发布你正在运行的代码吗?我的意思是在你的问题中,而不是在评论中。由于某些原因,图像没有添加。我正在尝试,但我不能,我不能发布有问题的图像,因为我是新的,从现在起,我将不得不等待90分钟来添加另一个问题。不要添加图像,通过编辑问题来添加代码。提出一个新问题是没有帮助的。非常感谢。您在很大程度上帮助了我。@RohitRajsuryaPrasad太好了,如果您单击复选标记为已接受,其他人将知道他们不需要回答。