Python if/Elif语句中的整数数组

Python if/Elif语句中的整数数组,python,python-3.x,Python,Python 3.x,我现在有下面的代码,如果文本文件的行以某个数字开头,它会将这些行附加到相应的列表中 有没有一种方法可以使用数字数组和循环来保存一些代码行?这个数字只需要停在9 多谢各位 for number in f: if number.startswith('1'): startsw1.append(number) elif number.startswith('2'): startsw2.append(number) elif number.startswith('3'):

我现在有下面的代码,如果文本文件的行以某个数字开头,它会将这些行附加到相应的列表中

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

多谢各位

for number in f:
if number.startswith('1'):
        startsw1.append(number)
elif number.startswith('2'):
        startsw2.append(number)
elif number.startswith('3'):
        startsw3.append(number)
elif number.startswith('4'):
        startsw4.append(number)
elif number.startswith('5'):
        startsw5.append(number)
elif number.startswith('6'):
    startsw6.append(number)
elif number.startswith('7'):
    startsw7.append(number)
elif number.startswith('8'):
        startsw8.append(number)
elif number.startswith('9'):
    startsw9.append(number)

您可以只拥有一个列表,其中嵌套列表的索引指示起始数字

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'], [], [], [], []]

您可以只拥有一个列表,其中嵌套列表的索引指示起始数字

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'], [], [], [], []]

如果必须在全局堆栈中填充列表,可以使用
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)

如果必须在全局堆栈中填充列表,可以使用
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)

我知道你要求用一个列表来保存你的列表,但我认为使用字典会更自然。您使用代码的方式最终将是相同的,但是如果出于某种原因,将来您需要支持的不仅仅是整数索引,那么您将不需要更改任何内容

默认字典是最自然的解决方案

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)
这里的好处是,您不必像使用
列表一样,预先分配
开始时使用的
对象。如果愿意,您甚至可以简单地将键存储为字符串(即
'1'
),而不是int


请注意,这假设您将使用此
字典开始,而不是九个不同的列表变量
startsw1
startsw9
,从长远来看,这将更易于维护。

我知道您请求使用列表来保存列表,但我认为使用字典会更自然。您使用代码的方式最终将是相同的,但是如果出于某种原因,将来您需要支持的不仅仅是整数索引,那么您将不需要更改任何内容

默认字典是最自然的解决方案

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)
这里的好处是,您不必像使用
列表一样,预先分配
开始时使用的
对象。如果愿意,您甚至可以简单地将键存储为字符串(即
'1'
),而不是int

请注意,这假设您将使用此
字典开始,而不是九个不同的列表变量
startsw1
startsw9
,从长远来看,这将更易于维护。

以下是我要做的

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个彼此相似的列表,那么最好列出这些列表…

以下是我要做的

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个彼此相似的列表,那么最好列出一个列表……

污染全球是不可能的。@cᴏʟᴅsᴘᴇᴇᴅ - OP已经通过创建不同的列表污染了globals——这只是附加到它们上面,没有添加任何新的内容。我更喜欢第二个选项。太糟糕了,我的票数太多了,否则我会得到+1'd。污染全球是不可能的。@cᴏʟᴅsᴘᴇᴇᴅ - OP已经通过创建不同的列表污染了globals——这只是附加到它们上面,没有添加任何新的内容。我更喜欢第二个选项。太糟糕了,我的票数太多了,否则我会得到+1。