python - 我需要以特定方式排列我的列表 - python
问题描述
基本上,用户输入任何正数,然后程序应该安排一个列表,其中包含直到输入的数字的所有正数,以便列表中 2 个连续元素的总和是一个平方数。如果输入的数字不允许排序,我只想让程序打印错误。这是到目前为止的代码:
u = int(input("ENTER: "))
l = []
for i in range(1, u + 1):
l.append(i)
o = l
t = []
for elem in l:
for x in o:
p = elem + x
p = math.sqrt(p)
if p%1 == 0:
if x == elem:
break
else:
t.append(x)
t.append(elem)
例如,如果我输入 15,那么列表 t 最终看起来像这样:
[3, 1, 8, 1, 15, 1, 1, 3, 6, 3, 13, 3, 5, 4, 12, 4, 4, 5, 11, 5, 3, 6, 10, 6, 2, 7, 9, 7, 1, 8, 7, 9, 6, 10, 15, 10, 5, 11, 14, 11, 4, 12, 13, 12, 3, 13, 12, 13, 2, 14, 11, 14, 1, 15, 10, 15]
该列表包含理论上可行的所有对,我坚持安排此列表,以便每个数字出现一次,并且每个连续数字都遵循上述属性。
所以我最终要找的名单是这样的:
[8, 1, 15, 10, 6, 3, 13, 12, 4, 5, 11, 14, 2, 7, 9]
提前感谢您的任何帮助。
解决方案
这将是一种具有递归函数的蛮力方法:
import math
def f(temp, numbers):
for i, j in zip(temp[:-1], temp[1:]):
sqrt = math.sqrt(i+j)
if int(sqrt) != sqrt:
return False
if not numbers:
return temp
for i in numbers:
result = f(temp + [i], [j for j in numbers if j != i])
if result:
break
return result
n = int(input("Arrange numbers from 1 to ").strip())
numbers = list(range(1, n+1))
print("Input:", numbers)
print("Output:", f([], numbers))
以 4 为例:
Arrange numbers from 1 to 4
Input: [1, 2, 3, 4]
Output: False
以 15 为例:
Arrange numbers from 1 to 15
Input: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]
Output: [8, 1, 15, 10, 6, 3, 13, 12, 4, 5, 11, 14, 2, 7, 9]
推荐阅读
- python - 如何在python中将元组列表转换为固定键目录格式
- linux - Linux 脚本失败
- android - 非法类文件:类模块信息缺少超类型。com.google.code.gson\gson\2.8.6
- python - 将路径名写入文件 (Python)
- java - 为什么标签不显示我的数组元素?
- c++ - 逆向图
- python - discord.py 覆盖 create_text_channel 权限
- ssh - 在 Emacs 中以其他用户身份在其他主机上编辑文件
- javascript - Typerror:对象不是函数或其返回值在反应 16.13.1 中不可迭代
- javascript - 需要帮助保存对字段的 fetch 调用的值