- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在编写将列表列表转换为矩阵的代码。这个函数应该可以扩展到更大的列表,我的输入只是为了让问题更容易解决。我还是个初学者,所以我需要一点帮助 =)
-输入:在示例输入中,list1 是水果和颜色对的数据集:
list1 = [[["apple", "red"], " 1 "],[["apple", "yellow"], " 1 "], [["apple", "green"], " 1 "]]
list1 += [[["lemon", "red"], " 0 "], [["lemon", "yellow"], " 1 "], [["lemon", "green"], " 0 "]]
list1 += [[["pear ", "red"], " 0 "], [["pear", "yellow"], " 0 "], [["pear", "green"], " 1 "]]
-期望的输出:
['', 'apple', 'lemon', 'pear']
['red', ' 1 ', 0, 0]
['yellow', 0, ' 1 ', 0]
['green', 1, 0, ' 1 ']
-我的输出
['///', 'apple', 'lemon', 'pear']
['red', ' 1 ', 0, 0]
['yellow', 0, ' 1 ', 0]
['green', 0, 0, ' 0 ']
------我的尝试:------
# create empty matrix
matrix=[]
for row in range(4):
new_row =[]
for col in range(4):
new_row.append(0) #if starting all-0
matrix.append(new_row)
# add object names
names = ["///", "apple", "lemon", "pear"]
color = ["///", "red", "yellow", "green"]
color = color[::-1]
matrix[0] = names
for row in matrix:
row[0] = color.pop()
second_obj = 0
for row in range(4):
for col in range(4):
if list[row][0][0] == matrix[0][col]:
while list[row][0][1] != matrix[second_obj][0]:
second_obj += 1
else:
if matrix[row][row] != "///":
matrix[row][row] = list[row][1]
second_obj = 0
最佳答案
编写一个手动循环来搜索列表会使事情过于复杂。编写两个循环来搜索两个字符串列表并尝试将它们混合在一起,同时还循环索引其他内容……难怪您自己感到困惑。
让我们放弃它,而是使用一些字典:
columns = {'apple': 1, 'lemon': 2, 'pear': 3}
rows = {'red': 1, 'yellow': 2, 'green': 3}
现在,如果您想知道将某些内容放入哪个矩阵元素,则没有循环,只需两次字典查找:
>>> (colname, rowname), value = [["apple", "red"], " 1 "]
>>> columns[colname]
1
>>> rows[rowname]
1
所以,现在我们所要做的就是从一个空矩阵开始:
matrix = [
['///', 'apple', 'lemon', 'pear'],
['red', 0, 0, 0],
['yellow', 0, 0, 0],
['green', 0, 0, 0]]
... 遍历元素:
for (colname, rowname), value in list1:
...查找列和行:
col = columns[colname]
row = rows[rowname]
...并存储数字:
matrix[row][col] = value
仅此而已。
嗯,差不多。您的数据存在问题,其中一个字符串是 'pear '
,而不是 'pear
'。如果那是数据中的错误,您可以修复它。如果您的代码应该处理它,您必须决定如何处理它。一个明显的选择是从字符串中去除任何多余的空格:
col = columns[colname.strip()]
row = rows[rowname.strip()]
如果您事先不知道所有标签,需要以编程方式查找它们怎么办?
您可以在主列表之前额外遍历列表,提取所有唯一的行和列名称。例如:
rows, columns = {}, {}
for (colname, rowname), value in list1:
if rowname not in rows:
next_unused_index = len(rows) + 1
rows[rowname] = next_unused_index
if colname not in columns:
next_unused_index = len(columns) + 1
columns[colname] = next_unused_index
现在,要构建矩阵,您需要从这两个字典构建它。如果您使用的是 Python 3.7,则可以相信字典的顺序是正确的,但不依赖于此可能更清楚。让我们先构建一个空矩阵:
matrix = [[0 for _ in range(len(columns)+1)]
for _ in range(len(rows)+1)]
...然后填写标题:
matrix[0][0] = '///'
for rowname, row in rows.items():
matrix[row][0] = rowname
for colname, column in columns.items():
matrix[0][column] = colname
...然后您可以运行与之前相同的代码来填充值。
关于python - 将数据列表的列表转换为 python 中的矩阵(检查内部),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51528587/
如标题所示,ans_list是一个答案列表,ans_index是一个数字(答案在词汇表中的索引,但与atm无关) 这里生成的 tree.anslist 是什么? (例如,仅针对第一个),忽略迭代。 f
我目前将用户的输入存储在逗号分隔的列表中,如下所示: Userid | Options 1 | 1,2,5 用户在一个数组形式中勾选一组选项,然后用逗号连接起来 1,2,5 然后 MySQ
我目前将用户的输入存储在逗号分隔的列表中,如下所示: Userid | Options 1 | 1,2,5 用户在一个数组形式中勾选一组选项,然后用逗号连接起来 1,2,5 然后 MySQ
我想知道如何完全展平列表和包含它们的东西。除其他外,我想出了一个解决方案,它可以将具有多个元素的东西滑倒并将它们放回原处,或者在滑倒后将具有一个元素的东西拿走。 这与 How do I “flatte
我想知道如何完全展平列表和包含它们的东西。除其他外,我想出了一个解决方案,它可以将具有多个元素的东西滑倒并将它们放回原处,或者在滑倒后将带有一个元素的东西拿走。 这与 How do I “flatte
这个问题已经有答案了: Convert nested list to 2d array (3 个回答) 已关闭 7 年前。 java中有没有快捷方式可以转换 List> 到 String[][] ?
我在排序时遇到问题 List> 。我创建了一个自定义比较器,在其中编写了对数据进行排序的代码。 public class CustomComparator implements Comparator
这个问题已经有答案了: 已关闭10 年前。 Possible Duplicate: Java Generics: Cannot cast List to List? 我只是想知道为什么下面的java代
试图想出一个 LINQy 方法来做到这一点,但我什么也没想到。 我有一个对象列表<>,其中包含一个属性,该属性是逗号分隔的字母代码列表: lst[0].codes = "AA,BB,DD" lst[1
假设我有这些任务: points = [] point = (1, 2) 我怎么会这样做: points += point 它工作得很好,并且给了我点 = [1, 2]。但是,如果我这样做: poin
如何在 scala 中将 List[Task[List[Header]]] 类型转换为 Task[List[Header]]。 我有一个方法返回 Task[List[Header]] 并多次调用 do
如何在 Java 中查找二维列表的元素? 我有一个参数为 List> 的函数我想知道如何找到这个列表的行和列。 最佳答案 如果你喜欢 List> obj 然后你就可以像这样访问 obj.get(cur
分配 List到 List工作正常。 分配 List>到 List>不编译。 代码 public class Main { public static void main(String[] a
我正在用 Java 编写一个方法,该方法必须接收并迭代 Serializable 的 List。 有什么区别: public void myMethod(List list) { } 和 public
我看到很多人想用 mvvm 更新网格/列表/树的一部分,但他们不想刷新整个列表。 对于所有遇到此问题的人,我做了以下示例。 希望这对你有用。 最佳答案 这是一个简单的例子。整个代码中最重要的是: Bi
我正在为现有的 C++ 库编写包装器,该库使用列表,其中 T 是自定义结构。我被建议使用 vector 而不是列表,但我试图避免修改库。 为了更好地理解这个场景,我做了一个简单的应用程序,使用一个列表
List list List list 这两种声明有什么区别吗? 谢谢, 最佳答案 是的。 List可以包含所有派生自 Base 的不同事物的混合物. List包含同质项(从某种意义上说,它们必须全部
有人可以尽可能详细地解释以下类型之间的区别吗? List List List 让我更具体一点。我什么时候想使用 // 1 public void CanYouGiveMeAnAnswer(List l
我有一个元组列表,每个元组都是一对列表。所以我的数据看起来像: mylist = [(['foo', 'bar'], ['bar', 'bar']),(['bar', 'bar'],['bar', '
也许是一个时髦的标题,但我遇到了以下问题: 给定一个类型为 (a * b) list 的列表,我想创建一个类型为 (a * b list) list 的新列表。一个例子: 给定列表 let testL
我是一名优秀的程序员,十分优秀!