Python if/Elif语句中的整数数组
我现在有下面的代码,如果文本文件的行以某个数字开头,它会将这些行附加到相应的列表中 有没有一种方法可以使用数字数组和循环来保存一些代码行?这个数字只需要停在9 多谢各位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'):
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。