理解Python

理解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中唯

需要帮助理解此代码的具体功能。我理解连接函数的作用。我只是在努力理解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中唯一的元素,值是每个元素在原始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]
表示
是iterable
c.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”以及之后的任何内容,才能得到我的答案。