在Python中可以递增切片吗?

0 投票
1 回答
783 浏览
提问于 2025-05-01 02:03

我有一段代码:

def getresult (someset):
    result = []
    index = 0
    for key, value in mydict.items():
        if someset.issubset(value):
            result.append(key)
    while (len(result)<10):
        index = index+1
        someset = someset[index:]
        getresult(someset)
    return result

我的想法是想知道某个集合(someset)是否是某个列表的子集。如果不是,我想逐步缩减这个集合,直到找到结果为止(如果最后这个集合只剩下一个元素,肯定能找到结果,所以不会出现无限循环的问题)。

上面的代码给我报了个错:TypeError: 'set' object has no attribute 'getitem'。我猜这意味着我不应该在切片中使用变量名。

  • 切片可以递增吗?
  • 如果不行(或者你觉得切片根本无法得到我想要的结果),有没有其他方法可以遍历一个集合,每次循环时忽略一个元素?
暂无标签

1 个回答

0

在看完大家的评论后,我意识到其实有一个更简单的方法可以得到我想要的结果。

为了后人,这里就是那个方法:

for key, value in mydict.items():
    for i in someset:
        if i in value:
            mylist.append(key)

然后,我可以简单地用一个计数器来从我的列表中制作一个频率字典,并列出那些值最高的键:

tmpdict = Counter(mylist)
finallist = [i for (i,j) in tmpdict.items() if j >= 2]
#if j >=2, then k originally had more than 2 elements of someset as a value

撰写回答