更新包含整数范围的列表中的第一个元素

1 投票
3 回答
87 浏览
提问于 2025-04-14 17:59

在一个包含区间(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

撰写回答