列表初始化和打印中的python列表

时间:2017-12-12 20:09:15

标签: python list matrix

我试图将一个元素附加到列表中的列表中,每个列表都有一个递增的值:

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]时,它打印出一个'正确。我在这里缺少哪些范围?

2 个答案:

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