理解Python
需要帮助理解此代码的具体功能。我理解连接函数的作用。我只是在努力理解format函数在做什么,lambda函数在做什么理解Python,python,python-3.x,Python,Python 3.x,需要帮助理解此代码的具体功能。我理解连接函数的作用。我只是在努力理解format函数在做什么,lambda函数在做什么 t = ''.join('{0}'.format(key, val) for key, val in sorted(c.items(), key = lambda x:x[-1], reverse = True)) 那是一个有趣的故事。人们不应该专业地写这样的东西,尤其是在没有注释的情况下 计数器是由另一个iterable组成的iterable,其键是原始iterable中唯
t = ''.join('{0}'.format(key, val) for key, val in sorted(c.items(), key = lambda x:x[-1], reverse = True))
那是一个有趣的故事。人们不应该专业地写这样的东西,尤其是在没有注释的情况下 计数器是由另一个iterable组成的iterable,其键是原始iterable中唯一的元素,值是每个元素在原始iterable中出现的次数。例如:
l1 = ["a"] * 4 + ["b"] * 2 + ["c"] * c + ["d"]
c1 = Counter(l1)
print c1
#Counter({'a': 4, 'c': 3, 'b': 2, 'd': 1})
a = '{0} is very {1}'.format('Tom','tall')
items()将计数器转换为形式(键、值)的元组列表。
行获取该元组列表,并按iterable的value元素降序对它们进行排序。根据上面的例子:
l2 = sorted(c1.items(), key = lambda x:x[-1], reverse = True)
print l2
#[('a', 4), ('c', 3), ('b', 2), ('d', 1)]
现在列表已排序,它将迭代列表中的每个键、值对。在本例中,String.format用传递的第一个参数替换{0}。他们可能传递了两个元素来迷惑你。它所要做的就是按照原始iterable中出现次数的降序追加每个键
s1 = ''.join('{0}'.format(key, val) for key, val in l2)
print s1
#acbd
这在功能上等同于
''.join(p[0] for p in sorted(c1.items(), key = lambda x:x[-1], reverse = True))
String.format基本上不起任何作用。TL;医生:
lambda
是一种很好的方法,可以(在手之前)指定要查看或使用的内容。否则,您将无法指定:
“我想对iterable中每个元素的索引1进行排序”
逐步:
lambda
正在将键设置为x
的最后一个元素(x[-1]
),其中x
是c.items()中的一个元素
所以本质上,流程是这样的:
sorted()
首先执行;它将对c.items()的内容进行排序
但它是什么样的呢lambda x:x[-1]
表示键
是iterablec.items()中每个元素的最后一个元素。因此,如果:
c.items()=['123','456','789']
然后,sorted()
的键将是'3',6',9'
,并且将按reverse=True
进行排序
但是由于c.items()
可能表示dict
内容,因此键的val
意味着每个元素将分解为两个不同的变量:key,val
。所以我前面的例子更像是:
c.items()
并且lambda
允许对1、2和0进行排序
您已经说过您理解连接
,但是格式
只使用键的值
;因此{0}
下面是一个例子,说明你正在做的事情:
>>> c = {'this': 136, 'that': 133, 'thus': 156}
>>> c.items()
dict_items([('this', 136), ('that', 133), ('thus', 156)])
>>> t = ''.join('{0}'.format(key, val) for key, val in sorted(c.items(), key = lambda x:x[-1], reverse = True))
>>> t
'thusthisthat'
由于sorted().这意味着我们将自动排序升序,但由于我们有reversed=True
,我们将排序降序
因此,以上就是您得到的!请参阅:
格式字符串“{0}”
包含一个替换字段。0
引用第一个(零索引)位置参数(这是'{0}'中的key
。格式(key,val)
)。如注释中所述,第二个位置参数val
不使用
见:
lambda函数作为键
参数传递。基本上,这是一种控制排序
如何对iterable进行排序的方法。从文档中可以看出:
key
指定一个参数的函数,该参数用于从每个列表元素提取比较键:key=str.lower
。默认值为None
(直接比较元素)
format是字符串类型的一种方法,例如:
l1 = ["a"] * 4 + ["b"] * 2 + ["c"] * c + ["d"]
c1 = Counter(l1)
print c1
#Counter({'a': 4, 'c': 3, 'b': 2, 'd': 1})
a = '{0} is very {1}'.format('Tom','tall')
a的输出将是“汤姆很高”
lambda所做的是使用一次性函数
lambda x:x[-1]
实际上是对
def function (x):
return x
在代码中排序(c.items(),key=lambda x:x[-1],reverse=True)
按(c.item中的最后一项)对c.items进行平均排序,并反向排序
例如
c.items=['a'、'1']、['b'、'0']、['c'、'3']]
排序后的项目将被删除
[['c', '3'], ['a', '1'], ['b', '0']]
格式
调用有点不必要的混乱;它只使用键
,但也传递值
(对于大多数,可能所有的键值,它实际上相当于str(key)
)…我建议阅读str
文档和sorted
/列表。sort
文档。我只想显示键。最初它是{0}{0}.format。我一定会看一看。现在我让它对我有利,我想在理解我所做的事情的同时使它更干净。非常感谢你的解释。我对Python非常陌生,我用一种我从未使用过的语言来回答一个挑战。我注意到计数器函数的输出,它不是完全w我一直在寻找的东西。我的结果只需要字母,这就是我使用格式的原因。我使用格式是因为我发现代码在使用它,所以我调整它以满足我的需要。我问这个问题是因为我不完全理解代码在做什么。现在我得到了答案,我想完全理解我是如何做到这一点的,以及更好的方法要这样做。如果你对这个挑战感兴趣的话。我必须根据该字母在提供的文本文件中出现的次数,按降序对其进行排序。从那里我必须删除“u”以及之后的任何内容,才能得到我的答案。