我目前有以下代码,如果它们以特定数字开头,则会将文本文件的行附加到相应的列表中。
有没有办法可以使用数值数组和循环来保存一些代码行?这个数字只需要停在9点。
谢谢。
["Maps"]
答案 0 :(得分:0)
你可以只有一个列表,其中嵌套列表的索引表示起始数字。
startsw = [[] for i in range(0,11)]
f = ['122','423','42341','635']
for number in f:
startsw[int(number[0])].append(number)
输出:
[[], ['122'], [], [], ['423', '42341'], [], ['635'], [], [], [], []]
答案 1 :(得分:0)
如果您必须填写全局堆栈中的列表,可以使用globals()
来获取对列表的引用,然后只需附加到它们:
for number in f:
globals()["startsw" + number[0]].append(number)
这假设您已在全局命名空间中创建了startsw1
,startsw2
,startsw3
... startsw9
列表以及f
中的所有元素是字符串,并将其第一个字符作为数字。
但是,使用专用的dict
存储您的号码列表要好得多:
starts_dict = {i+1: [] for i in range(9)}
for number in f:
starts_dict[number[0]].append(number)
答案 2 :(得分:0)
我意识到您要求使用列表来保存列表,但我认为使用字典会更自然。您使用代码的方式最终会相同,但如果由于某种原因,您需要支持的不仅仅是整数索引,那么您不必更改任何内容。
默认词典是最自然的解决方案。
from collections import defaultdict
starts_with = defaultdict(list)
for number in f:
# Probably should have some error handling in case the first
# character cannot be converted to an int.
starts_with[int(number[0])].append(number)
这里的好处是,您不必像使用starts_with
那样预先分配list
对象。如果愿意,您甚至可以简单地将键存储为字符串(即'1'
)而不是整数。
请注意,这假定您将使用此starts_with
字典而不是九个不同的列表变量startsw1
.. startsw9
,从长远来看,这将更容易维护
答案 3 :(得分:0)
这就是我要做的事情
some_num_dict = {
'1': startw1,
'2': startw2,
'3': startw3,
'4': startw4,
'5': startw5,
'6': startw6,
'7': startw7,
'8': startw8,
'9': startw9
}
for number in f:
some_num_dict[number[0]].append(number)
当然,我假设number
是一些数字字符串对象。
编辑:就像其他人提到的那样。如果你刚刚做了9个彼此相似的列表,那么建立列表列表可能会更好......