将YEAR与Python中的其他数字分开

时间:2015-04-17 02:10:19

标签: python datetime

给出一个字符串列表,是否可以将YEAR与其他数字分开,例如

ll = [700, 138.44, 5, 1862, 39.8, 30, 205.0, 30, 98.1, 180, 10, 6, 640, 29, 46.53, 45, 114, 10, 231, 2002, 2002, 176.47, 10]

Python中有没有办法将2002年和1862年与其他数字分开?

谢谢!


具体来说,我想选择任何四位数YEAR,这显然是人眼。并且700是灰色区域,假设我们将其视为正常数字。

2 个答案:

答案 0 :(得分:0)

如果您想将年份与该列表分开,假设年份总是4个数字,而年份是列表中唯一的4个数字

ll = [700, 138.44, 5, 1862, 39.8, 30, 205.0, 30, 98.1, 180, 10, 6, 640, 29, 46.53, 45, 114, 10, 231, 2002, 2002, 176.47, 10]
for i in ll:
    if len(str(i)) == 4 and str(i).isalnum():
        print i

这将打印

1862
2002
2002

你的列表中有2002年两次。如果需要,您可以过滤重复项。 我正在将列表中的项目转换为字符串,以便我可以检查字符串长度。我还要确保所有字符都是数字,以避免打印像98.1这样的数字。它确保不考虑带小数的数字,因为我正在检查字符串长度。

另一种方法是将数字转换为字符串一次而不是两次,这会增加长列表的速度

for i in (str(num) for num in ll):
    if len(i) == 4 and i.isalnum():
        print i

我正在使用生成器(str(num) for num in ll),因此它也具有内存效率。如果你想要一些更容易阅读的东西,你可以这样做。

ll = (str(i) for i in ll)
for i in ll:
    if len(i) == 4 and i.isalnum():
        print i

答案 1 :(得分:0)

假设"年"是四位数,是一个整数:

def int_len(n):
    length = 0
    while n > 0:
        length += 1
        n /= 10
    return length

ll = [700, 138.44, 5, 1862, 39.8, 30, 205.0, 30, 98.1, 180, 10, 6, 640, 29, 46.53, 45, 114, 10, 231, 2002, 2002, 176.47, 10]
print [i for i in ll if type(i) == int and int_len(i) == 4]
#OUT: [1862, 2002, 2002]