【问题标题】:Print for loop results in one line and sort在一行中打印for循环结果并排序
【发布时间】:2013-08-19 06:36:03
【问题描述】:
for n in range(1,1000000):
    print(n)
    result = []
    for x in range(1,3000001):
        if n%2==0:
            x=n/2
        else:
            x=3*n+ 1
        n=x
        result.append(n)
        if n==1:
            break
    print(len(result))
n+=1

我希望将这些结果打印在一个数组或类似的东西中。我的意思是这样。

3,1,7,2,5,8,1,..

那我想取最高的元素和它的索引。我该怎么做呢?谢谢。

【问题讨论】:

  • 外循环每次迭代的数组?
  • 是的。我想将结果打印到数组中并找到最大值及其索引。

标签: python sorting for-loop python-3.x collatz


【解决方案1】:

第一个任务可以使用str.join

>>> result = [4, 0, 9, 7, 8, 3, 2, 6, 1, 5]
>>> print (', '.join(map(str, result)))
4, 0, 9, 7, 8, 3, 2, 6, 1, 5

maxenumerate 用于第二个任务:

>>> ind, val = max(enumerate(result), key=lambda x:x[1])
>>> ind, val
(2, 9)

【讨论】:

  • 我没有列表。我只有来自 for 循环的值。那么如何将它们打印到数组中并找到最大值及其索引?
  • @user2297793 在您的代码中,您显然将项目附加到result 列表中。除了 print(n)print(len(result)) 你什么都没有打印。
【解决方案2】:

如果你将完成工作的循环分离到它自己的函数中,这会变得容易得多。

def collatz_length(n):
    result = []
    for x in range(1,3000001):
        if n%2==0:
            x=n/2
        else:
            x=3*n+ 1
        n=x
        result.append(n)
        if n==1:
            break
    return len(result)


print(max((collatz_length(i + 1), i) for i in range(1000000)))

由于你没有使用result,只是它的长度,你可以通过简单的计数来简化(并加速)函数

你可以使用ternary expression来整理x的计算

def collatz_length(n):
    for c in range(1, 3000001):
        x = 3 * n + 1 if n % 2 else n / 2
        n = x
        if n == 1:
            return c

【讨论】:

  • 我没有列表。我只有来自 for 循环的值。那么如何将它们打印到数组中并找到最大值及其索引?
  • @user2297793,您正在寻找最长的结果?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-10-06
  • 2018-10-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多