代码之家  ›  专栏  ›  技术社区  ›  Nolan Bradshaw

列表拼接变量分配自动化

  •  -2
  • Nolan Bradshaw  · 技术社区  · 6 年前

    假设您有一个字符串列表。

    lst = ['a','b17','c','dz','e','ff','e3','e66']
    

    您希望将这些字符串分离为单个变量

    a = lst[:7] b = lst[7:14] c = lst[14:21]

    我想知道是否有一种类似python的方法来处理这个问题,而不是花时间把每个列表拼接出来。

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

    您可以使用生成器表达式生成切片,并将其解压缩为所需的变量:

    a, b, c = (lst[i:i+7] for i in range(0, 21, 7))
    

    但是,如果列表中的项目超过21个,则会产生一个错误,即需要解包的项目太多,因此最好使用列表理解将其保留为列表,而不是单个变量:

    [lst[i:i+7] for i in range(0, len(lst), 7)]
    
        2
  •  1
  •   U13-Forward    6 年前

    尝试以下方法:

    def f(lst,n):
       l=[]
       range_=list(range(0,len(lst),n))
       for x,y in zip(range_,range_[1:]):
          l.append(lst[x:y])
       return l
    print(f(lst,7))
    

    lst 作为:

    lst = ['a','b17','c','dz','e','ff','e3','e66']*5
    

    [['a', 'b17', 'c', 'dz', 'e', 'ff', 'e3'], ['e66', 'a', 'b17', 'c', 'dz', 'e', 'ff'], ['e3', 'e66', 'a', 'b17', 'c', 'dz', 'e'], ['ff', 'e3', 'e66', 'a', 'b17', 'c', 'dz'], ['e', 'ff', 'e3', 'e66', 'a', 'b17', 'c']]