如何创建整数列表的2D列表并设置特定值

时间:2017-06-09 22:20:37

标签: python list python-3.x

如何创建一个看起来像这样的矩阵?我不想使用numpy。

class MinimiumEdits(object):
    def mini(self,str1,str2):

        temp = [[0]*len(str1)]*len(str2)

        for i in range(len(temp[0])):
            temp[0][i] = i
        for i in range(len(temp)):
            temp[i][0] = i


MinimiumEdits().mini("apple","apples")

我试过这个,这是错误的:

Object object1 = new Integer();

3 个答案:

答案 0 :(得分:1)

内部列表都引用相同的子列表(这是列表乘法的副作用):

temp[0] is temp[1]  # True

is比较检查这些是否是同一个对象。如果您了解指针,则执行指针等式检查。不是值相等(在Python中是==)。

这意味着所有更改都会传播到所有“行”。要解决此问题,您只需将其更改为:

temp = [[0]*len(str1) for _ in range(len(str2))]

这应该足以解决问题。

答案 1 :(得分:0)

修改

不导入任何东西,你可以这样做:

def get_list(val, fillvalue=0):
    return [list(range(val+1))] + [[k] + [fillvalue]*val for k in range(1, val)]
# Try with different values like
# get_list(4) or get_list(3)
final = get_list(5)
print(final)

输出:

[[0, 1, 2, 3, 4, 5],
 [1, 0, 0, 0, 0, 0],
 [2, 0, 0, 0, 0, 0],
 [3, 0, 0, 0, 0, 0],
 [4, 0, 0, 0, 0, 0]]

答案 2 :(得分:0)

嗯,你可以用一种纯粹的列表理解来解决这个问题:

[[x if not y else y if not x else 0 for x in range(6)] for y in range(5)]
# [[0, 1, 2, 3, 4, 5],
#  [1, 0, 0, 0, 0, 0],
#  [2, 0, 0, 0, 0, 0],
#  [3, 0, 0, 0, 0, 0],
#  [4, 0, 0, 0, 0, 0]]