【问题标题】:Separating list of years into decades将年份列表分成几十年
【发布时间】:2015-07-17 17:37:02
【问题描述】:

我有以下数组:

array([1963, 1964, 1965, 1966, 1967, 1968, 1969, 1970, 1971,
       1972, 1973, 1974, 1975, 1976, 1977, 1978, 1979, 1980, 1981, 1982,
       1983, 1984, 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993,
       1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
       2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013], dtype=object)

我想将它分成单独的列表,每十年一个(例如,1970-1979 是一个十年)。

现在,我正在循环浏览这些年并分成不同的列表。有没有更 Pythonic 的方式来解决它?

【问题讨论】:

  • itertools.groupby(array, key= lambda x : str(x)[:3])?
  • 这是一个numpy 数组吗?

标签: python arrays numpy


【解决方案1】:

您可以使用itertools.groupby 并将年份除以10。这基本上将按十年分组。然后在列表理解中使用它并创建一个新的array

>>> import numpy as np
>>> from itertools import groupby
>>> np.array([list(g) for k,g in groupby(a, lambda i: i // 10)])
array([[1963, 1964, 1965, 1966, 1967, 1968, 1969],
       [1970, 1971, 1972, 1973, 1974, 1975, 1976, 1977, 1978, 1979],
       [1980, 1981, 1982, 1983, 1984, 1985, 1986, 1987, 1988, 1989],
       [1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999],
       [2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009],
       [2010, 2011, 2012, 2013]], dtype=object)

请注意,groupby 要求您对序列进行排序(看起来就像您的数据一样)。

【讨论】:

  • 很好的答案,尽管可能值得注意的是原始列表必须进行排序(哈哈,要么你是一个非常快速的打字员,要么你已经这样做了:P)
  • 有没有办法在该行中编写排序函数?
  • 他不能写而不是a, sorted(a)吗?
  • @omri_saadon 是的
  • @omri_saadon 取决于 Python 版本,但在 Python 3.x 中 int / int 仍会进行 浮点除法,但我想强制 整数除法 所以我使用了//stackoverflow.com/questions/1535596/…
【解决方案2】:

np.floor 还有一个更简单的方法和技巧

    import numpy as np
    years = np.array([1963, 1964, 1965, 1966, 1967, 1968, 1969, 1970, 1971,
          1972, 1973, 1974, 1975, 1976, 1977, 1978, 1979, 1980, 1981, 1982,
          1983, 1984, 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993,
          1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
          2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013])

    decades = []
    for each in years:
        decade = int(np.floor(each / 10) * 10)
        decades.append(decade)

    print(set(decades)) 

【讨论】:

    猜你喜欢
    • 2021-10-08
    • 2021-06-23
    • 1970-01-01
    • 2020-08-23
    • 2015-11-28
    • 1970-01-01
    • 2014-07-06
    • 1970-01-01
    • 2019-09-06
    相关资源
    最近更新 更多