Python 重复列表

标签 python

首先,这是我的代码:

row_1 = [3]
row_2 = [7, 4]
row_3 = [2, 4, 6]
row_4 = [8, 5, 9, 3]

for element in row_3:
    key = row_3.index(element)
    row_3[key] = element + max(row_4[key], row_4[key + 1])

for element in row_2:
    key = row_2.index(element)
    row_2[key] = element + max(row_3[key], row_3[key + 1])

for element in row_1:
    key = row_1.index(element)
    row_1[key] = element + max(row_2[key], row_2[key + 1])

print(row_1)

到目前为止,这段代码是有效的。正如您可能注意到的,有相当多的重复,我想知道如何压缩它。理想情况下,我想要类似的东西

for element in row_x:
    key = row_x.index(element)
    row_x[key] = element + max(row_(x+1)[key], row_(x+1)[key + 1])

我知道这是完全错误的,但这只是我的想法。我将非常感谢所有的见解。

哦,顺便说一下,这段代码最大化了金字塔中两个相邻数字的总和(参见此处:http://projecteuler.net/problem=18)

最佳答案

这就是你所说的翻译(消除循环重复):

l = [[3],
     [7, 4],
     [2, 4, 6],
     [8, 5, 9, 3]]

for row in range(len(l)-2, -1, -1)
    for key, element in enumerate(l[row]):
        l[row][key] = element + max(l[row+1][key], l[row+1][key+1])

print(l[0][0])

您的错误是将三角形存储在单独的数据结构上,只需使用嵌套列表并对其进行迭代即可。

此外,如果在迭代可迭代对象时同时需要元素和索引,请使用 enumerate 函数。

<小时/>
  • 由于range(start, end, step)start迭代到end(不包括end) ,step 是增量,range(range(len(l)-2, -1, -1) 迭代,如“len(l)-2 -> len(l)-3 -> ... -> 1 -> 0”。请注意,我们想要0 被包含在内,所以我们传递 -1 作为参数。对于 range 函数和切片来说,一个好的助记符是“你传递您想要的第一个参数,以及您不想要的第一个参数”。
  • 此外,正如 @user2357112 所说,元组打包-解包是 Python 的一个非常好的功能。基本上,当赋值的 RHS 是可迭代时,您可以在 LHS 上使用元组,并且元素将被相应地分配。您可以省略括号,并且还有更多语法糖:

喜欢:

In [1]: a, b, *c, d = range(5)

In [2]: a, b, d
Out[2]: (0, 1, 4)

In [3]: c
Out[3]: [2, 3]

您也可以在循环中使用解包:

In [1]: l = ["enumerate", "is", "a", "nice", "builtin"]

In [2]: list(enumerate(l))
Out[2]: [(0, 'enumerate'), (1, 'is'), (2, 'a'), (3, 'nice'), (4, 'builtin')]

In [3]: for i, v in enumerate(l):
   ...:     print(i, "->", v)
   ...:     
0 -> enumerate
1 -> is
2 -> a
3 -> nice
4 -> builtin

关于Python 重复列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23974740/

相关文章:

python - Scrapy下载文件报错302

python - 根据列值更新值的简洁方法

python - 如何在 Pandas (python)中定义自己的填充方法参数?

python - 如何命名将整数列表转换为对列表的函数?

python - 如何使用逗号作为千位分隔符打印数字

Python ctypes.string_at() 在 Python 3(但不是 2)中添加了周围的 b'...'

Python 文件中的空格

python - 为什么我在 matplotlib 的 x 轴上得到垃圾日期值?

javascript - XHR 无法加载 <URL>。请求的资源上不存在 'Access-Control-Allow-Origin' header

python - Keras 线程安全吗?