![](/img/trans.png)
[英]Trouble with this Python newbie exercise. Using Lists and finding if two adjacent elements are the same
[英]Two adjacent lists in python
我發現這個代碼示例,我認為編寫得非常好,但是我很難理解為什么它的部分工作原理。
代碼搜索字符串中最長的單詞:
def LongestWord(str):
''.join(map(lambda x: [' ',x][x.isalnum()], str)).split()
我不知道[' ',x][x.isalnum()]
工作的。 這個結構有名字嗎?
把它分成兩部分......
[' ', x]
構建2個元素的列表。 重寫為:
lst = [' ', x]
lst[x.isalnum()]
現在我們看到第二個括號是索引第一個括號創建的列表。 由於str.isalnum()
返回一個布爾值( True
或False
),並且因為布爾值在python中表現得像整數( True
- > 1
, False
- > 0
),所以構造只選擇列表中的兩個元素之一。
請注意,現在(python2.5及更高版本),使用條件表達式更具慣用性(並且可能更高效):
lambda x: x if x.isalnum() else ' '
理解這段代碼的關鍵是要知道布爾值可以用來索引列表。
['a','b'][True] # produces 'b'
['a','b'][False] # produces 'a'
所以代碼
[' ',x][x.isalnum()]
如果x是字母數字,則會產生x,否則會產生''
這是一種將句子字符串分成具有單個單詞的列表的方法,但是將所有非字母數字字符替換為通過作為分隔符而被刪除的空格。 要理解它,您必須從map命令開始。 字符串(str)由lambda函數檢查,無論它是否為字母數字,如果是,則字符保持不變('x'),但如果不是,則由''(空格)替換。 括號的作用類似[false,true] [condition]。 map函數遍歷字符串(str)。 然后,結果列表(帶有單個字符)將作為字符串(使用“”.join命令)連接到完整的句子並分成單詞(使用split()命令,並使用空格字符作為分隔符)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.