更新包含整数范围的列表中的第一个元素
在一个包含区间(1-59/4)的列表中,我想让每隔三行就把第一个元素单独改变一下。
n = 14
lis_num = []
for x in range(n):
lis_num.append('need the logic')
output of lis_num should be like below:
1 1-59/4
2 2-59/4
3 3-59/4
4 1-59/4
5 2-59/4
6 3-59/4
7 ..
8 ..
.....
14 ..
然后继续从第0行到第13行。
我还没有尝试过什么,只是在寻找一个思路,看看我们可以怎么做。
3 个回答
0
n = 14
lis_num = []
# Initialize a counter to track rows
counter = 1
# Initialize interval
interval = "1-59/4"
# Iterate over the range
for x in range(n):
# Append the current interval to lis_num
lis_num.append(f"{counter} {interval}")
# Increment the counter
counter += 1
# Check if it's time to update the first element
if counter % 3 == 1:
# Update the first element of the interval
interval = "1-59/4"
elif counter % 3 == 2:
# Update the second element of the interval
interval = "2-59/4"
else:
# Update the third element of the interval
interval = "3-59/4"
# Print each element of lis_num on a new line
for item in lis_num:
print(item)
输出
1 1-59/4
2 2-59/4
3 3-59/4
4 1-59/4
5 2-59/4
6 3-59/4
7 1-59/4
8 2-59/4
9 3-59/4
10 1-59/4
11 2-59/4
12 3-59/4
13 1-59/4
14 2-59/4
2
可以用列表推导式来解决这个问题 -
n=14
fixed_str="-59/4"
list1 = [f"{i%3+1}{fixed_str}" for i in range(n)]
输出结果
['1-59/4',
'2-59/4',
'3-59/4',
'1-59/4',
'2-59/4',
'3-59/4',
'1-59/4',
'2-59/4',
'3-59/4',
'1-59/4',
'2-59/4',
'3-59/4',
'1-59/4',
'2-59/4']
2
你可以使用 np.arange
这个函数,再配合取余运算符,然后把结果转换成字符串,最后把固定的部分拼接在一起:
import numpy as np
import pandas as pd
n = 14
out = pd.Series(np.arange(n)%3+1).astype(str)+'-59/4'
# or
out = pd.Series(np.arange(n)%3+1, dtype=str)+'-59/4'
另外,你也可以使用 np.tile
(虽然效率较低,但如果你有不同的前缀,这种方法可能更灵活):
prefixes = ['1', '2', '3']
n = 14
out = pd.Series(np.tile([f'{p}-59/4' for p in prefixes], int(np.ceil(n/3)))[:n])
或者用你的循环(如果你需要输出一个数组或序列,这种方法不太推荐):
n = 14
lis_num = []
for x in range(n):
lis_num.append(f'{x%3+1}-59/4')
out = pd.Series(lis_num)
输出结果:
0 1-59/4
1 2-59/4
2 3-59/4
3 1-59/4
4 2-59/4
5 3-59/4
6 1-59/4
7 2-59/4
8 3-59/4
9 1-59/4
10 2-59/4
11 3-59/4
12 1-59/4
13 2-59/4
dtype: object