2005年07月01日 星期五 20:07
明啦,原来如此,细节问题最重要!!!! > lst = [[]] * n 等价于: > > x = [] > lst = [] > for i in range(n): > lst.append(x) > > lst = [ [] for x in range(n) ] 等价于: > > lst = [] > for i in range(n): > lst.append([]) > > 看出区别了吗? > 第一种方法的lst中的每一个元素都指向同一个[](即赋值给x上的那个)。而第二 > 种方法的lst中的每一个元素则为不同的[] > > 这是在使用 [x] * n 语法时要特别注意的地方。 > > > kassarar wrote: > > 喔~~谢谢,但,怎么判断什么情况下创建引用,什么情况下创建新对象呢 > > > >> kassarar wrote: > >> > 我用的是python2.4.1 > >> > > >> > >>> TypeDict=dict(zip(AllTypes,[[]]*len(AllTypes))) > >> > >> 把这句改成 > >> > >> TypeDict = dict(zip(AllTypes, [[] for t in AllTypes])) > >> > >> 不然你这里创建的列表指向的都是同一个[] > >> > >> BTW, 我觉得写成 TypeDict = dict((t, []) for t in AllTypes) 更pythonic些 > >> > >> [...] > >> > > >> > >>> TypeDict['IntType'].append('k') > >> > >>> TypeDict > >> > {'IntType': ['k'], 'TypeType': ['a', 'b'], 'CodeType': ['k'], > >> > 'BooleanType': ['k'], 'UnboundMethodType': ['k'], 'StringType': > >> > ['k'], 'BuiltinMethodType': ['k'], 'FloatType': ['k'], 'DictionaryType': > >> > ['k'], 'NotImplementedType': ['k'], 'BuiltinFunctionT > >> > ype': ['k'], 'DictProxyType': ['k'], 'GeneratorType': ['k'], > >> > 'InstanceType': ['k'], 'ObjectType': ['k'], 'DictType': ['k'], 'F > >> > ileType': ['k'], 'EllipsisType': ['k'], 'ListType': ['k'], 'MethodType': > >> > ['k'], 'TupleType': ['k'], 'ModuleType': ['k'], 'Fram > >> > eType': ['k'], 'LongType': ['k'], 'BufferType': ['k'], 'TracebackType': > >> > ['k'], 'ClassType': ['k'], 'UnicodeType': ['k'], 'Slic > >> > eType': ['k'], 'ComplexType': ['k'], 'LambdaType': ['k'], > >> > 'FunctionType': ['k'], 'XRangeType': ['k'], 'NoneType': ['k']} > >> > > >> > #但这里就不明白了,怎么每一个都加了呢 > >> [...] > > -- > Qiangning Hong > _______________________________________________ > python-chinese list > python-chinese at lists.python.cn > http://python.cn/mailman/listinfo/python-chinese > -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.exoweb.net/pipermail/python-chinese/attachments/20050701/689bdcac/attachment.html
Zeuux © 2025
京ICP备05028076号