python:逗号在+ = s中做了什么,?

时间:2018-03-08 02:31:39

标签: python comma

我正在解决问题,输入是字符串:

["abc","bcd","acef","xyz","az","ba","a","z"]

下面列出了代码。

def groupStrings(self, strings):
    groups = collections.defaultdict(list)
    for s in strings:
        tmp=[0]*len(s)
        for i in range(len(s)):
            tmp[i]=(ord(s[i])-ord(s[0]))%26
            tmptuple=tuple(tmp)

        groups[tmptuple] += s,
    return groups.values()

所以在 groups[tmptuple]+=s,

如果我删除逗号',' 我得到了

[["a","b","c","b","c","d","x","y","z"],["a","c","e","f"],["a","z"],["a","z","b","a"]]

而不是

[["abc","bcd","xyz"],["acef"],["a","z"],["az","ba"]]

这些组只是没有添加整个字符串s,任何人都可以解释为什么逗号会使它不同以及为什么我不能用逗号来做它?

1 个答案:

答案 0 :(得分:6)

尾随逗号生成tuple,其中包含单个元素s。除非存在歧义(例如,使用函数调用parens),否则Python不需要使用括号来生成tuple;除了空tuple())之外,您通常可以使用逗号制作tuple,而不是括号。在这种情况下,单个尾随逗号s,等同于(s,)

由于groups具有list值,这意味着执行+= s,等同于.append(s)(从技术上讲,它更接近.extend((s,)),但最终结果是一样的)。有人可能试图保存一些按键。

如果省略了逗号,它将执行list += str,将str解释为一系列字符,并使用每个生成的len 1字符串扩展列表,如您所见。