首页 > 解决方案 > Python,在创建递增列表名称的同时创建列表列表

问题描述

该程序从接收一个字符串开始。程序读入字符串,然后使用索引将其划分为不同的变量。所以:

var_1 = string[position] + string[position+1]
var_2 = string[position+2] + string[position+3]

依此类推。我使用循环并增加位置。

我想将前 8 个变量保存到列表中。接下来的 8 个变量被保存到下一个列表中,以此类推。

问题是输入字符串长度可以是许多不同的长度。它们的字符串是始终具有正确长度的数据,可以创建整数个列表。但它可能是两个列表到几十个列表。

我需要访问之前的数据列表来进行计算。

我想做类似的事情:

difference = list_2[3] - list_1[3]
list_2 += [difference] # which I think makes the difference the new 9th item in list_2

问题是我不知道可能有多少个列表。我试图逐步命名列表。然后,当我提取信息时,我将能够使用 list_name[position#] 来索引这些值。我不知道如何增加列表名称,以便进行索引。

如何为索引创建递增的列表名称?第一个原因是,我不想制作大量列表名称(尤其是当我不会全部使用它们时)第二个原因是,我不知道我需要制作多少个列表,直到输入数据串?

我会通过取 len(string) / 32 # 知道要创建多少个列表 # 有 32 个字符来填充每个列表中变量中的所有值。所以如果我有 128 个字符,我想要:

list_1
list_2
list_3
list_4

但如果我在字符串中有 416 个字符,我希望列表名称上升到:

...
list_12
list_13

谢谢,SDD

标签: pythonlist

解决方案


代替:

var1
var2
var3
...

var列一个清单,这样你就有:

var[0]
var[1]
var[2]
...

列表中的条目可以是列表本身。作为一般规则,如果你有一个编程问题,似乎需要创建一堆都包含相同类型的变量,你可能想要创建一个容器(如列表或字典)来保存所有这些值,这样您就可以轻松地遍历它们(无论有多少),而不必输入一堆单独的名称并限制为某个固定数量的名称。

这是 REPL 中的一个非常简单的示例,说明如何基于单个输入字符串构建包含两个字符的字符串的八元素列表:

>>> string = "asldkfjalskdfjalskdjflaskdjflaskdjflaksdjfkjsldkfjsldakjfsdlkaaa"
>>> var = [[]]
>>> for i in range(0, len(string), 2):
...     if len(var[-1]) == 8:
...         var.append([])
...     var[-1].append(string[i:i+2])
...
>>> var
[['as', 'ld', 'kf', 'ja', 'ls', 'kd', 'fj', 'al'], ['sk', 'dj', 'fl', 'as', 'kd', 'jf', 'la', 'sk'], ['dj', 'fl', 'ak', 'sd', 'jf', 'kj', 'sl', 'dk'], ['fj', 'sl', 'da', 'kj', 'fs', 'dl', 'ka', 'aa']]
>>> var[0]
['as', 'ld', 'kf', 'ja', 'ls', 'kd', 'fj', 'al']
>>> var[1]
['sk', 'dj', 'fl', 'as', 'kd', 'jf', 'la', 'sk']
>>> var[2]
['dj', 'fl', 'ak', 'sd', 'jf', 'kj', 'sl', 'dk']
>>> var[3]
['fj', 'sl', 'da', 'kj', 'fs', 'dl', 'ka', 'aa']

在这里,我们利用该range函数帮助我们以 2 为步长迭代字符串的索引,并且我们使用字符串切片 ( string[i:i+2]) 轻松抓取那些两个字符的切片。

var[-1]始终是 list 的最后一个元素var,它以包含单个空列表 ( [[]]) 的列表开始;当我们遍历字符串时,我们总是将这两个字符附加到最后一个列表的末尾。

我们还总是检查是否var[-1]已经达到了八个元素;如果是这样,则该子列表已完成,因此我们append在末尾创建一个新的空列表,var以便我们可以开始一个新列表。


推荐阅读