簡體   English   中英

python中的兩個相鄰列表

[英]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()返回一個布爾值( TrueFalse ),並且因為布爾值在python中表現得像整數( True - > 1False - > 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM