提问人:Joe 提问时间:8/5/2022 最后编辑:Joe 更新时间:8/8/2022 访问量:241
生成具有不同长度的序列
generate a sequence with different lengths
问:
我正在尝试编写可以生成可以用任何序列概括的序列的代码:
1 0:0
2 0:1
3 0:2
. .
. .
59 0:58
60 0:59
61 1:0
62 1:1
63 1:2
. .
. .
119 1:58
120 1:59
121 2:0
122 2:1
123 2:2
. .
. .
. .
16383 273:2
16384 273:3
整个数据样本可以在 Google 表格中公开找到。
我可以发现序列总是以固定序列开始,但最后它只是让我很难写出可以推广到任何长度的任何序列的公式(在这个例子中,序列长度是 16385,但它可以是序列始终存在的任何长度)0..59
0..3
0..59
我尝试了以下方法:
s = list()
for h in range(16385): # this index can be different; like 20000 or any
for m in range(60): # always fixed number = 60
s.append(f'{h}:{m}')
这个代码片段即使以 结尾,它也会继续,这些是 的最后 5 个元素0..59
s
;
s[-5:] => ['16384:55', '16384:56', '16384:57', '16384:58', '16384:59']
而预期的输出应该是这样的:我不确定如何概括这一点。s[-2:] => ['273:2', '273:3']
答:
3赞
Valerii
8/5/2022
#1
我不确定这是否正是您所要求的,但它可能会帮助您尝试一些方法来找到解决方案。
# A short way
print([f'{x%(60*60)}:{x%60}' for x in range(20000)])
# A little bit more precise
s = list()
amount = 20000
[s.append(f'{x%(60*60)}:{x%60}') for x in range(amount)]
print(s)
# A precise way
s = list()
amount = 20000
for x in range(amount):
hours = x%(60*60)
minutes = x%60
s.append(f"{hours}:{minutes}")
print(s)
更新: 也许我理解你。您只需要小时和分钟,因此最好只是迭代:
s = list()
amount = 2000
for h in range(amount):
hours = h%(60*60)
for m in range(60):
minutes = m
s.append(f"{hours}:{minutes}")
print(s)
评论
0赞
Joe
8/5/2022
非常感谢@Valerri。但是当我设置最后 2 个值时 where 而不是mount = 16385
s
['1984:58', '1984:59']
['273:2', '273:3']
0赞
Joe
8/5/2022
'mount = 16385' 不是小时,它只是一个索引。
0赞
Joe
8/5/2022
如果我检查,我会找到序列必须结束的地方。s.index('273:2')
16382
1赞
Valerii
8/5/2022
@Joe 好吧,这更容易,只是基本的算术打印([f'{i//60}:{i%(60)}' for i in range(16385)])
1赞
Valerii
8/5/2022
在您的情况下,数字 16385 是分钟数,因此我们得到 16385/60=273(小时)
0赞
mr.curiousity
8/5/2022
#2
试试这个: [f'{(x-1)//60}:{(x-1)%60}' for x in (1,100, 16381)]
或 [f'{int((x-1)/60)}:{(x-1)%60}' for x in (1,100, 16381)]
-1赞
Xin
8/5/2022
#3
behind_tuple = tuple(i for i in range(60))
front_tuple = tuple(i for i in range(280))
final = tuple(f'{f}:{b}' for f in front_tuple for b in behind_tuple)
print(final.index('273:2'))
"""
16382
"""
1赞
Happy Ahmad
8/8/2022
#4
使用以下代码:
output = [f'{int(index/60)}:{index%60}' for index in range(16384)]
print(output[-2:])
输出将是:
['273:2', '273:3']
请注意,索引以 0(而不是 1)开头。
评论
if
else