我试图将一个元素附加到列表中的列表中,每个列表都有一个递增的值:
def get_data(file):
matrix = [ ['one','two','three'] ] #list of lists
test_count = 0
line_count = 0 #keep track of which line we are on
for line in file:
if line.find('example') != -1: #test for example string
temp_a = re.findall(r"\'(.+?)\'",line)[0]
print matrix[test_count][0] #should print 'one'
matrix[test_count][0].insert(temp_a) #should insert temp_a instead of 'one'
test_count += 1 #go to next "new" list in the matrix
line_count += 1 #go to next line
我想要的是findall进入temp_a并从那里将其插入到列表中第一个列表的索引0中的结果。然后下次findall为true时,我想将temp_a插入第二个列表的索引0。
例如,如果第一个temp_a值为9,我希望矩阵中的第一个列表为: [[9,y,z]] 如果在第二个findall我的temp_a是4,我希望矩阵成为: [[9,y,z],[4,y,z]]
上述代码是我迄今为止最好的尝试。 我有两个问题:
1)如何初始化列表列表'如果列表的数量没有固定?
2)列表['一个'两个'三个']用于测试打印正在进行的操作。如果我尝试打印矩阵[test_count] [0],我会得到一个"索引超出范围"错误,但是当我改变它以打印矩阵[0] [0]时,它打印出一个'正确。我在这里缺少哪些范围?
答案 0 :(得分:1)
回答你的问题:
1)像这样:matrix = []
简单地说,这只是创建一个空列表,您可以添加任何内容,包括更多列表。因此,matrix.append([1,2,3])
会为您提供如下列表:[[1,2,3]]
2)因此,您index out of range
错误来自于您将test_count
递增到1,但您的矩阵长度保持为1(意味着它只有0索引)因为你永远不会附加任何东西。为了获得您想要的输出,您需要进行一些更改:
def get_data(file):
example_list = ['one','two','three']
matrix = [] #list of lists
test_count = 0
line_count = 0 #keep track of which line we are on
for line in file:
if line.find('example') != -1: #test for example string
temp_a = re.findall(r"\'(.+?)\'",line)[0]
new_list = example_list[:]
new_list[0] = temp_a
matrix.append(new_list)
test_count += 1 #go to next "new" list in the matrix
line_count += 1 #go to next line
print matrix #[['boxes', 'two', 'three'], ['equilateral', 'two', 'three'], ['sphere', 'two', 'three']]
答案 1 :(得分:0)
对于2),您是否尝试打印出test_count?由于test_count + = 1在if语句中,因此如果不打印“one”,它不应超出范围。
对于1),您可以在插入之前执行此操作:
if test_count == len(matrix):
matrix.append([])
如果test_count超出矩阵范围,它会添加一个新的空列表。
修改强>
由行temp_a = re.findall(r"\'(.+?)\'",line)[0]
引起的“超出范围”,因为它无法找到任何内容。所以这是一个空列表,[0]超出范围。
def get_data(file):
matrix = [ ['one','two','three'] ] #list of lists
test_count = 0
line_count = 0 #keep track of which line we are on
for line in file:
if line.find('example') != -1: #test for example string
temp_a = re.findall(r"\'(.+?)\'",line)
if temp_a:
temp_a = temp_a[0]
else:
continue # do something if not found
print(matrix[test_count][0]) #should print 'one'
new_list = matrix[test_count][:]
new_list[0] = temp_a
matrix[test_count].append(new_list) #should insert temp_a instead of 'one'
test_count += 1 #go to next "new" list in the matrix
line_count += 1 #go to next line