python如何输入二维数组
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python如何输入二维数组相关的知识,希望对你有一定的参考价值。
也能输入吧,用eval处理一下。
# -*- coding: utf8 -*-arrayString = input('输入一个二维数组:')
array = eval(arrayString)
print(array)
输入一个二维数组:[[1,2],[3,4]][[1, 2], [3, 4]]
参考技术A 在Python中,一个像这样的多维表格可以通过“序列的序列”实现。一个表格是行的序列。每一行又是独立单元格的序列。这类似于我们使用的数学记号,在数学里我们用Ai,j,而在Python里我们使用A[i][j],代表矩阵的第i行第j列。这看起来非常像“元组的列表”(Lists of Tuples)。
“列表的列表”示例:
我们可以使用嵌套的列表推导式(list comprehension)创建一个表格。 下面的例子创建了一个“序列的序列”构成的表格,并为表格的每一个单元格赋值。
table= [ [ 0 for i in range(6) ] for j in range(6) ]print tablefor d1 in range(6):for d2 in range(6):table[d1][d2]= d1+d2+2print table123456程序的输出结果如下:
[[0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0]],
[[2, 3, 4, 5, 6, 7], [3, 4, 5, 6, 7, 8], [4, 5, 6, 7, 8, 9],
[5, 6, 7, 8, 9, 10], [6, 7, 8, 9, 10, 11], [7, 8, 9, 10, 11, 12]]
1234
这个程序做了两件事:创建了一个6 × 6的全0表格。 然后使用两枚骰子的可能组合的数值填充表格。 这并非完成此功能最有效的方式,但我们通过这个简单的例子来演示几项技术。我们仔细看一下程序的前后两部分。
程序的第一部分创建并输出了一个包含6个元素的列表,我们称之为“表格”;表格中的每一个元素都是一个包含6个0元素的列表。它使用列表推导式,对于范围从0到6的每一个j都创建对象。每一个对象都是一个0元素列表,由i变量从0到6遍历产生。初始化完成之后,打印输出二维全0表格。
推导式可以从里向外阅读,就像一个普通表达式一样。内层列表[ 0 for i in range(6) ]创建了一个包含6个0的简单列表。外层列表[ [...] for j in range(6) ]创建了这些内层列表的6个深拷贝。
程序的第2个部分对2个骰子的每一个组合进行迭代,填充表格的每一个单元格。这由两层嵌套循环实现,每一个循环迭代一个骰子。外层循环枚举第一个骰子的所有可能值d1。内层循环枚举第二个骰子d2。
更新每一个单元格时需要通过table[d1]选择每一行;这是一个包含6个值的列表。这个列表中选定的单元格通过...[d2]进行选择。我们将掷骰子的值赋给这个单元格,d1+d2+2。
其他示例:
打印出的列表的列表不太容易阅读。下面的循环会以一种更加可读的形式显示表格。
for row in table:
print row[2, 3, 4, 5, 6, 7]
[3, 4, 5, 6, 7, 8]
[4, 5, 6, 7, 8, 9]
[5, 6, 7, 8, 9, 10]
[6, 7, 8, 9, 10, 11]
[7, 8, 9, 10, 11, 12]
12345678910111213作为练习,读者可以试着在打印列表内容时,再打印出行和列的表头。提示一下,使用"%2d" % value字符串运算符可以打印出固定长度的数字格式。显示索引值(Explicit Index Values)。
我们接下来对骰子表格进行汇总统计,得出累计频率表。我们使用一个包含13个元素的列表(下标从0到12)表示每一个骰子值的出现频率。观察可知骰子值2在矩阵中只出现了一次,因此我们期望fq[2]的值为1。遍历矩阵中的每一个单元格,得出累计频率表。
fq= 13 * [0]for i in range(6):for j in range(6):c= table[i][j]fq[ c ] += 112345使用下标i选出表格中的行,用下标j从行中选出一列,得到单元格c。然后用fq统计频率。
这看起来非常的数学和规范。
Python提供了另外一种更简单一些的方式。
使用列表迭代器而非下标,表格是列表的列表,可以采用无下标的for循环遍历列表元素。
fq= 13 * [0]print fqfor row in table:for c in row:fq[c] += 1print fq[2:
如何在 C++ 中检查二维数组中负值的输入验证?
【中文标题】如何在 C++ 中检查二维数组中负值的输入验证?【英文标题】:How can I check input validation for negative values in a 2D array in C++? 【发布时间】:2020-07-13 17:05:51 【问题描述】:这里只是一个简单的问题。我正在尝试检查输入验证的负值,我希望我的程序只接受用户输入的正值,这是我的代码。
//loop to array.
for(int i = 0; i < 3; i++) //loop to row first
//take in input into data.
for(int j = 0; j < 5; j++) //loop to column
//take input data.
cout <<"Monkey " << i+1 <<" ";
cout <<"Day " << j +1 << ":";
cin >> pound_food[i][j];
if(pound_food[i][j] < 0)
cout <<"Invalid number, number can't be negative, please try again\n";
break;
当他们找到负数时,我尝试打破循环或继续,但是即使我不希望将负数存储在数组中,它也会继续存储数字。我只希望它只存储正整数并重新提示用户再次输入数字。不知道为什么,希望听听大家的意见!
【问题讨论】:
您将数字存储在数组中,然后检查符号。cin >> pound_food[i][j];
-- 是不是有点太晚了,因为你已经用你不想存储的值弄乱了二维数组?如何将输入存储在一个临时变量中,检查它,如果没问题,然后将它存储在二维数组中?
啊我试试看,谢谢你的建议!
我是关于临时变量的代码,然后我看到了 Paul 的评论 :) 无论如何,@ Verax11 如果你喜欢人们的回答,你可以给他们投票,选择其中一个作为真正的答案等。
【参考方案1】:
如果您遇到负数,那么您可以减少列索引j
而不是将break
退出整个列循环。这样,下一个数字将插入到刚刚插入负数的相同位置:
if(pound_food[i][j] < 0)
cout <<"Invalid number, number can't be negative, please try again\n";
--j; // instead of break
【讨论】:
我明白了,我不知道你可以做这样的事情。谢谢!!!【参考方案2】:另一种解决方案是编写一个内部while
循环,直到输入正常为止:
for(int j = 0; j < 5; j++) //loop to column
//take input data.
cout <<"Monkey " << i+1 <<" ";
cout <<"Day " << j +1 << ":";
bool ok = false;
while (!ok)
cin >> pound_food[i][j];
if(pound_food[i][j] < 0)
cout <<"Invalid number, number can't be negative, please try again\n";
else
ok = true;
或者:
for(int j = 0; j < 5; j++) //loop to column
//take input data.
cout <<"Monkey " << i+1 <<" ";
cout <<"Day " << j +1 << ":";
while (true)
cin >> pound_food[i][j];
if(pound_food[i][j] < 0)
cout <<"Invalid number, number can't be negative, please try again\n";
else
break;
【讨论】:
感谢您的提示!我不知道你可以做这样的事情哈哈。谢谢!以上是关于python如何输入二维数组的主要内容,如果未能解决你的问题,请参考以下文章