生成具有不同长度的序列

generate a sequence with different lengths

提问人:Joe 提问时间:8/5/2022 最后编辑:Joe 更新时间:8/8/2022 访问量:241

问:

我正在尝试编写可以生成可以用任何序列概括的序列的代码:

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..590..30..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..59s;

s[-5:] => ['16384:55', '16384:56', '16384:57', '16384:58', '16384:59']

而预期的输出应该是这样的:我不确定如何概括这一点。s[-2:] => ['273:2', '273:3']

python-3.x 列表 算法 序列

评论

0赞 MattDMo 8/5/2022
假设输入是分钟,您需要除以 60 才能得到小时数。
0赞 Joe 8/5/2022
你能澄清一下吗?
0赞 Zero 8/5/2022
难道不是一个简单的陈述就可以完成这项工作吗?ifelse

答:

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 = 16385s['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)开头。