Python 我想将列表的长度打印到第一个副本?

Python 我想将列表的长度打印到第一个副本?,python,python-2.7,Python,Python 2.7,所以我在这里创建了一个函数answer,我要做的就是打印计数,直到列表有唯一的值 我所做的是: 步骤1:我将数字x传递给函数。 第二步:创建x和y,只不过是x的升序和降序值。 步骤3:我做了z=x-y,并将z分配给n,n是n的新值 步骤4:重复并在列表中存储值,直到列表唯一 例如:如果n=1211,那么x=2111,y=1112,因此z=2111-1112=0999,接下来n=0999 现在名单是[12110999] 这将一直持续到列表具有唯一值为止 我知道我的应答函数有问题,因为它所做的只是从

所以我在这里创建了一个函数answer,我要做的就是打印计数,直到列表有唯一的值

我所做的是:
步骤1:我将数字x传递给函数。
第二步:创建x和y,只不过是x的升序和降序值。
步骤3:我做了z=x-y,并将z分配给n,n是n的新值
步骤4:重复并在列表中存储值,直到列表唯一

例如:如果n=1211,那么x=2111,y=1112,因此z=2111-1112=0999,接下来n=0999

  • 现在名单是[12110999]
  • 这将一直持续到列表具有唯一值为止
  • 我知道我的应答函数有问题,因为它所做的只是从列表中删除重复值并打印它。 现在它正在运行一个无限循环,但不应该,因为答案是1,它在一个值之后重复。 你能告诉我如何改进我的代码,这样我就可以得到正确的计数吗

    def dscend(n):
        listb = map(int, str(n))
        b = sorted(listb, key=int, reverse=False)
        asc = int(''.join(map(str, b)))
        return asc
    
    def ascend(n):
        lista = map(int, str(n))
        a = sorted(lista, key=int, reverse=True)
        dsc = int(''.join(map(str, a)))
        return dsc
    
    
    def answer(n):
        nums = []
        n = int(n)
        while n not in nums[:n]:
            final = nums.append(n)
            w = len(nums)
            x = ascend(n)
            y = dscend(n)
            z = x - y
            n = z
            print w
            print nums
    
    
    answer("1211")
    
    您的代码有两个(主要)问题。首先,您必须检查完整的NOM列表,以确保没有重复项,而不是
    n
    ,其中
    n
    是一个相当任意的数字。此外,您还需要将列表条目保留为字符串,以确保表示的是
    '0999'
    ,而不是
    999
    。通过此更改,
    上升
    下降
    不需要将输入转换为字符串,而是必须将结果转换为带前导零的字符串

    此外,如果要查找重复模式的周期长度,必须在末尾添加几行,在原始列表中使用查找到的重复作为搜索值,以查找周期的第一个元素

    因此,通过这些更改,代码看起来就像,最终打印来自循环:

    def descend(n):
        listb = map(int, n)
        b = sorted(listb, key=int, reverse=False)
        asc = int(''.join(map(str, b)))
        return asc
    
    def ascend(n):
        lista = map(int, n)
        a = sorted(lista, key=int, reverse=True)
        dsc = int(''.join(map(str, a)))
        return dsc
    
    def answer(n):
        n_len = len(n)
        nums = []
        while n not in nums:
            final = nums.append(n)
            w = len(nums)
            x = ascend(n)
            y = descend(n)
            z = x - y
            n = "{:0{n_len}}".format(z, n_len=n_len)
            print w
            print nums
        first = nums.index(n)
        nums = nums[first:]
        w = len(nums)
        print w
        print nums
    
    answer("1211")  
    

    我希望这就是你想要的答案。

    我不太明白你到底想要什么?是否要计算唯一元素的数量或重复项的数量,或列表到第一个重复项的长度,或列表到最后一个重复项的长度?请重新填写,以使其更清楚。从列表的长度到第一个副本@JohanLHow
    n不在nums中[:n]:
    准确地工作吗?你想将列表从开始到开始的空列表的1211索引进行切片吗?这正是我要寻找的,除了他们的是一个小问题,如果你能解决这个问题,我将不胜感激。在某个点n=6174,然后z=7641-1467,这只是6714,在这一点之后是递归的。那么他们有没有办法让我数一数这个循环,然后打印出这个循环的计数,在这种情况下是1,这很有效,不是吗?当我测试
    answer('6174')
    时,我会得到打印出来的
    1
    ['6174']
    。我想这样做是因为对于这个特定的数字,这个周期很小,即6714在一次迭代中到达6714,所以列表有('6714')。但在某些情况下,这种循环可能是巨大的。我能找到这个循环吗?是的,但假设我想通过在应答函数中输入“1211”来找到这个6174循环。是的,但这也行。
    nums
    中的最后一个条目必须是一个值,该值只能作为自身重复,否则序列将继续。