Python 我想将列表的长度打印到第一个副本?
所以我在这里创建了一个函数answer,我要做的就是打印计数,直到列表有唯一的值 我所做的是: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] 这将一直持续到列表具有唯一值为止 我知道我的应答函数有问题,因为它所做的只是从
步骤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
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
中的最后一个条目必须是一个值,该值只能作为自身重复,否则序列将继续。