将列表内容存储为具有相同索引的两个不同列表

时间:2017-03-11 10:37:06

标签: python arrays list

所以我试图将内容列表存储在两个不同的矩阵中,具体取决于我从哪里读取代码。换句话说,我将在这个模式的列表中阅读:

['1', '1', '-1'], ['1', '1', '-1'], ['1', '1', '-1'], [], ['1', '1', '-1'], [], 
['1', '2', '-1'], ['1', '2', '-1'], ['1', '2', '-1'], [], ['1', '2', '-1'], [], etc

我想要做的是读取并存储2D阵列中第一个空格之前的所有内容,例如:

inputs[i] = ['1', '1', '-1', '1', '1', '-1', '1', '1', '-1']
inputs[i+1] = ['1', '2', '-1', '1', '2', '-1', '1', '2', '-1']

然后空格后面的下一组数字为:

outputs[i] = ['1', '1', '-1']
outputs[i+1] = ['1', '2', '-1']

在我存储了相应的输出之后,以i + 1的增量重复。

我不一定要硬编码所有内容,因为输入的数量可能不同(即在输出前到达空格之前我可以有4个输入列表)。我试过做一个for循环,如:

l = ['1', '1', '-1'], ['1', '1', '-1'], ['1', '1', '-1'], [], ['1', '1', '-1'], [], 
['1', '1', '-1'], ['1', '1', '-1'], ['1', '1', '-1'], [], ['1', '1', '-1'], [], etc

for line in l:
    if line != []:
        inputs[i].append(line) 
    else:
        outputs[i].append(line.next) # Get that output line
        line.next() # To skip the following blank line

我遇到的问题是我不知道在哪里增加i,而且根据我增加的位置,输出和输入不会在同一个索引上。存储这样的东西最好的方法是什么?

2 个答案:

答案 0 :(得分:1)

如果我理解正确,您要处理的列表包含这种序列:

 private void newb_Click(object sender, EventArgs e)
 {
     Button btn = (Button)sender;
     //  textBox1.Text = btn.Text;
     connection con = new connection();
     con.connecting();
     // Button b = new Button();
     int i = 0;
     var query = "select itemname,itemcode,price from item_master                     where itemcode =" + btn.Name;
     MySqlCommand cmd = new MySqlCommand(query, con.con);
     while (i < 10)
     {

         MySqlDataAdapter sda = new MySqlDataAdapter();
         DataTable dt = new DataTable();
         sda.SelectCommand = cmd;
         DataTable dbdataset = new DataTable();
         sda.Fill(dbdataset);
         BindingSource bsource = new BindingSource();
         bsource.DataSource = dbdataset;

         dataGridView1.DataSource = bsource;
      //  MessageBox.Show(btn.Name);
         i++;
     }
    // sda.Update(dbdataset);
 //  =dataGridView1.Rows[0]

//// MySqlDataReader mdr;
//// mdr = cmd.ExecuteReader();
// while (mdr.Read()) 
// {
////  textBox1.Text = (mdr["itemname"].ToString());
// }
}

 private void textBox1_TextChanged(object sender, EventArgs e)
 {

 }

 private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e)
 {

 }

即,由空列表分隔的多组输入和输出。

在迭代传入列表中的项目时。 您可以使用标志变量来跟踪您是否正在处理输入或输出,例如:

inputs empty output empty inputs empty output empty inputs empty output empty inputs empty output empty ...

例如:

inputs = [[]]
outputs = []
input_mode = True

for lst in lists:
    if not lst:
        if not input_mode:
            inputs.append([])
        # flip the mode
        input_mode = not input_mode
    elif input_mode:
        # extend last input list
        inputs[-1].extend(lst)
    else:
        outputs.append(lst)

上述实施将产生lists = ['1', '1', '-1'], ['1', '1', '-1'], ['1', '1', '-3'], [], ['1', '1', '-4'], [], ['1', '1', '-1'], ['1', '1', '-1'], ['1', '1', '-7'], [], ['1', '1', '-8'] inputs

outputs

答案 1 :(得分:0)

我想你想做什么。 首先,如果变量i依赖于行的内容(您不能预测哪里增加),最好的方法可能是列表:

input = []
output = []

如果您想在其中存储新值,请使用追加功能:

input.append(aux)

on aux:

isInput = True
aux = []
for line in l:
    if line != []:
        if isInput:
            inputs.append([aux]) 
            isInput = False
        else:
            outputs.append([aux])
            isInput = True
        aux = []
    else:
        aux.append(line.next) # Get that output line
        line.next() # To skip the following blank line