创建一个字符串列表,其中包含连续的数字。

6

我相信一定有一个简单的方法来实现这个:我想创建一个列表,最终成为DataFrame的列名。有13列,每列代表一个时间段,称为“Period n”,其中n是时间段编号。我认为可能可以通过循环来构建这个列表,但我将展示我尝试过的内容:

col_no = list(range(1,14))
col_name = ['Period' for n in range (1,14)]
col_list = col_name + col_no

print(col_list)

['Period',
 'Period',
 'Period',
 'Period',
 'Period',
 'Period',
 'Period',
 'Period',
 'Period',
 'Period',
 'Period',
 'Period',
 'Period',
 1,
 2,
 3,
 4,
 5,
 6,
 7,
 8,
 9,
 10,
 11,
 12,
 13]

然后我尝试了:
col_list = list(zip(col_name + col_no))
print(col_list)

[('Period',),
 ('Period',),
 ('Period',),
 ('Period',),
 ('Period',),
 ('Period',),
 ('Period',),
 ('Period',),
 ('Period',),
 ('Period',),
 ('Period',),
 ('Period',),
 ('Period',),
 (1,),
 (2,),
 (3,),
 (4,),
 (5,),
 (6,),
 (7,),
 (8,),
 (9,),
 (10,),
 (11,),
 (12,),
 (13,)]

基本上,我只想要一个容易生成的列表,读取“第1节”,“第2节”等。我对Python还比较新,有点困惑。谢谢提前。

6个回答

22
您可以在循环迭代时将它们(数字和单词“Period”)连接在一起。

Python 3.6+

print([f'Period {i}' for i in range(1, 14)])

Python 2.7+

print(['Period {}'.format(i) for i in range(1, 14)])

这很好,可能需要注意一下,这是特定于Python 3.6+的。 - user3483203

7
Pandas有方便的方法pandas.DataFrame.add_prefixpandas.DataFrame.add_suffix可以为您完成此操作。这两个方法可以在DataFrame中添加前缀或后缀,并且不会改变原始数据。
import pandas as pd

df = pd.DataFrame(1, list('abc'), range(1, 5))
df

   1  2  3  4
a  1  1  1  1
b  1  1  1  1
c  1  1  1  1

df.add_prefix('Period_')

   Period_1  Period_2  Period_3  Period_4
a         1         1         1         1
b         1         1         1         1
c         1         1         1         1

6
尝试以下操作:
['Period ' + str(n) for n in range(14)]

在我看来,这绝对是最好的答案。 - Maxhirez

5

在你上一次尝试中,你已经走在了正确的道路上:

zip(col_name + col_no)

问题在于这里的 +。你把两个列表拼接成一个大列表,然后尝试对它进行 zip 操作。而你想要做的是将这两个列表进行 zip 操作:

zip(col_name, col_no)

…然后添加生成的一对。

这意味着使用循环——无论是for语句、列表推导式,还是map内部的隐式循环……

此外,你不能只是将字符串和数字相加,需要先将数字转换成字符串:

name + str(no)

...或者使用字符串格式化:

f"{name}{no}”

因此,将所有内容组合在一起:
[name + str(no) for name, no in zip(col_name, col_no)]

还有其他方法来解决这个问题(例如,您不需要那么多重复的名称列表),但这展示了如何从您的目标到达那里。


1
你正在将数字列表附加到Period列表中。为了实现你想要的效果,你需要循环遍历Period列表,并将它们与1到13的数字连接起来。但是有一个更简单的解决方案,你可以尝试使用它。
col_list = ['Period ' + str(n) for n in range(14)]
print col_list

1
列表解析是正确的方法:
solution = (['Period %i' %i for i in range(1, 14)])

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接