代码之家  ›  专栏  ›  技术社区  ›  Nemo

在python列表中查找表示数字的连续字符串

  •  0
  • Nemo  · 技术社区  · 6 年前

    我有一张这样的单子

    ['1133', '1300', '1418', '1443', '1473', '1600', '1601', '1988', '1990', '1991', '1992', '1993', '1994', '1995', '1996', '1997', '1998', '2000', '2003', '2004', '2005', '2006', '2007', '2008', '2009', '2010', '2012', '2013', '2014', '2015', '2153', '2600', '3000', '3714', '3785', '3896', '3995', '4001', '4436', '5094', '5346', '8000']
    

    如何找到包含连续数字字符串(例如:“2012”、“2013”、“2014”、“2015”)的子组?

    谢谢您!

    2 回复  |  直到 6 年前
        1
  •  1
  •   smac89    6 年前

    试试这样的:

    l = ['1133', '1300', '1418', '1443', '1473', '1600', '1601', '1988', '1990', '1991', '1992', '1993', '1994', '1995', '1996', '1997', '1998', '2000', '2003', '2004', '2005', '2006', '2007', '2008', '2009', '2010', '2012', '2013', '2014', '2015', '2153', '2600', '3000', '3714', '3785', '3896', '3995', '4001', '4436', '5094', '5346', '8000']
    
    size = len(l)
    i = 0
    while i < size:
       j = i
       while j + 1 < size and int(l[j]) + 1 == int(l[j + 1]):
          j += 1
       if j != i:
           print (l[i:j+1])
       i = j + 1
    

    输出:

    ['1600', '1601']
    ['1990', '1991', '1992', '1993', '1994', '1995', '1996', '1997', '1998']
    ['2003', '2004', '2005', '2006', '2007', '2008', '2009', '2010']
    ['2012', '2013', '2014', '2015']
    
        2
  •  1
  •   mulaixi    6 年前

    如果将列表转换为int列表。

    mylist = list(map(int, mylist))
    

    然后你就可以申请写下的答案 here . 但是,如果您使用的是python 3,请不要忘记将其转换为python3语法。

        3
  •  1
  •   Ofer Sadan    6 年前

    这是一种方法,如果您对指定的所有元素都在同一个元素上感到满意的话 result 列表

    a = ['1133', '1300', '1418', '1443', '1473', '1600', '1601', '1988', '1990', '1991', '1992', '1993', '1994', '1995',
         '1996', '1997', '1998', '2000', '2003', '2004', '2005', '2006', '2007', '2008', '2009', '2010', '2012', '2013',
         '2014', '2015', '2153', '2600', '3000', '3714', '3785', '3896', '3995', '4001', '4436', '5094', '5346', '8000']
    result = []
    for i, x in enumerate(a):
        previous_e = -9999 if i == 0 else int(a[i - 1])
        next_e = -9999 if i == len(a) - 1 else int(a[i + 1])
        if int(x) == previous_e + 1 or int(x) == next_e - 1:
            result.append(x)
    
    print(result)
    

    [“1600”、“1601”、“1991”、“1992”、“1993”、“1994”、“1995”、“1996”、“1997”、“1998”、“2004”、“2005”、“2006”、“2007”、“2008”、“2009”、“2010”、“2013”、“2014”、“2015”]

    推荐文章