0

此代码片段是fukuzawa_yumi在LeetCode 问题中的帖子之一

def splitArray(self, nums):
    d,n={nums[0]:[0]},len(nums)
    for i in range(1,n):
        nums[i]+=nums[i-1]
        if nums[i] not in d: d[nums[i]]=[i]
        else: d[nums[i]].append(i)
    for i in range(1,n-5):
        for k in d.get(nums[-1]-nums[i-1],[]):
            if i+3<k<n-1 and any(nums[i-1]+nums[j+1]==nums[k-1] for j in d.get(nums[i]+nums[i-1],[]) if i<j<k-2): return True
    return False

,对我nums[0]:[0]来说d: d[nums[i]]=[i]不熟悉,我在网上找不到解释。

请在正确的方向上参考我,并为后代举几个例子。

4

2 回答 2

1
d,n={nums[0]:[0]},len(nums)

写1的方式有点难看:

d = {nums[0]: [0]}
n = len(nums)

它创建一个d包含单个项目的字典。键是第一个元素,nums值是一个list包含的元素0

稍后,当您到达:

d[nums[i]] = [i]

这是对字典的“替换或设置”操作。该代码将带有 key = 的字典项设置为具有nums[i]值为 的单个元素的列表i

1在我的主观意见:)

于 2020-01-11T02:23:47.770 回答
1
d,n={nums[0]:[0]},len(nums)

这条线的作用是:

  • 绑定到具有键(列表中的第一个元素)和值(包含 0 的列表)d的单个元素的字典nums[0]nums[0]
  • 绑定n到列表的长度nums

在 Python 中可以像这样在一行中组合两个赋值。Python 将根据顺序执行变量的赋值。这与进行元组扩展相同。

于 2020-01-11T02:29:36.023 回答