我正在使用 Python 来制作列表。应该很容易!我不知道为什么我为此苦苦挣扎。
我有一些按日期统计的数据。有这样一个日期列:
Created on
5/1/2015
5/1/2015
6/1/2015
6/1/2015
7/1/2015
8/1/2015
8/1/2015
8/1/2015
在这种情况下,5 月将创建 2 个单元,6 月将创建 2 个单元,7 月将创建 1 个单元,8 月将创建 3 个单元。
我想在 4 月开始的列表中反射(reflect)这一点([4 月算,5 月算,6 月算,等等...]):
NumberofUnits = [0, 2, 3, 1, 3, 0, 0, 0, 0, 0, 0, 0]
我有一个不错的月份列表
monthnumbers
Out[69]: [8, 5, 6, 7]
我还有一个包含 unitcounts = [2, 3, 1, 3]
的列表,我使用 value_counts 得到了它。
所以这是制作一个零列表并用 unitcount 列表替换部分的问题,对吧?
出于某种原因,我所有的尝试要么没有列出 list ,要么没有列出其中有一个零的 list 。
NumberofUnits = [0]*12
for i in range(0,len(monthnumbers)):
if **monthnumbers[i] == (i+4):** **This part is wrong**
NumberofUnits.append(unitcounts[i])
s = slice(0,i+1)
我也试过
NumberofUnits = []
for i in range(0, 12):
if len(NumberofUnits) > i:
unitcounts[i:]+unitcounts[:i]
NumberofUnits.append(unitcounts[i])
s = slice(0,i+1)
else:
unitcounts.append(0)
但这并没有说明在这一轮中我的数据是从五月开始的,所以我需要在第一个槽中有一个零。
最佳答案
如果数据来自文件或任何可迭代对象,您可以使用 OrderedDict
,从 4/april
开始按顺序创建键,然后递增计数每个月你都会遇到 finally 在末尾打印值列表,这些值将按要求的顺序排列:
from collections import OrderedDict
od = OrderedDict((i % 12 or 12, 0) for i in range(4, 16))
# -> OrderedDict([(4, 0), (5, 0), (6, 0), (7, 0), (8, 0), (9, 0), (10, 0), (11, 0), (12, 0), (1, 0), (2, 0), (3, 0)])
with open("in.txt") as f:
for line in f:
mn = int(line.split("/",1)[0])
od.setdefault(mn, 0)
od[mn] += 1
print(list(od.values()))
[0, 2, 2, 1, 3, 0, 0, 0, 0, 0, 0, 0]
除非您执行上述逻辑,在实际解析数据时关联数据,否则要弄清楚哪个月的计数会困难得多。直接创建关联是一种简单得多的方法。
如果你有一个列表、元组等值的逻辑是完全相同的:
for dte in list_of_dates:
mn = int(dte.split("/",1)[0])
od.setdefault(mn, 0)
od[mn] += 1
关于python - 根据 Python 中的月份列表制作列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32078850/