if / Elif语句中的整数数组

时间:2017-07-06 23:18:03

标签: python python-3.x

我目前有以下代码,如果它们以特定数字开头,则会将文本文件的行附加到相应的列表中。

有没有办法可以使用数值数组和循环来保存一些代码行?这个数字只需要停在9点。

谢谢。

["Maps"]

4 个答案:

答案 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)

这假设您已在全局命名空间中创建了startsw1startsw2startsw3 ... 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个彼此相似的列表,那么建立列表列表可能会更好......