㈠ python 字典怎麼轉成兩個列表,一個是key的,一個
在Python中,如果你希望將一個字典轉換為兩個列表,一個列表包含所有的鍵,另一個列表包含所有的值,你可以按照以下方式操作。假設你有一個字典a如下所示:
a = {1: 'a', 3: 'b', 5: 'c'}
通過調用字典的keys()和values()方法,你可以獲取到字典的所有鍵和值。然後將這兩個方法的結果分別賦值給兩個變數,如b和c。
具體代碼如下:
b, c = a.keys(), a.values()
這樣,b將包含字典a中的所有鍵,而c將包含字典a中的所有值。需要注意的是,b和c將返回可迭代對象,如果你想將它們轉換為列表,可以使用list()函數:
b = list(a.keys())
c = list(a.values())
這樣,b和c將分別成為包含字典a鍵和值的列表。
在實際應用中,這種操作非常有用。例如,當你需要對字典中的鍵和值分別進行操作或排序時,將它們轉換為列表後,可以更方便地進行處理。
此外,你還可以使用zip()函數將字典的鍵和值合並為一個列表的元組。具體操作如下:
keys_and_values = list(zip(a.keys(), a.values()))
這樣,keys_and_values將是一個包含元組的列表,每個元組的第一個元素是字典的鍵,第二個元素是對應的值。
總之,將字典轉換為鍵的列表和值的列表是一種常見的操作,它可以幫助你更好地處理字典中的數據。
㈡ Python中的常用內置函數有哪些呢
abs() divmod() input() open() staticmethod()
all() enumerate() int() ord() str()
any() eval() isinstance() pow() sum()
basestring() execfile() issubclass() print() super()
bin() file() iter() property() tuple()
bool() filter() len() range() type()
bytearray() float() list() raw_input() unichr()
callable() format() locals() rece() unicode()
chr() frozenset() long() reload() vars()
classmethod() getattr() map() repr() xrange()
cmp() globals() max() reverse() zip()
compile() hasattr() memoryview() round() __import__()
complex() hash() min() set()
delattr() help() next() setattr()
dict() hex() object() slice()
dir() id() oct() sorted()
㈢ python中for循環放在後面要怎麼理解
i因為閉包,lambda生成之後i引用的就是for循環中的i
建議你看一下python的列表生成器,
f = [(lambda n : i + n) for i in range(10)] 等同於
f=[]
for i in range(10)
f.append(lambda n : i + n)
下面是相關內容
列表生成式即List Comprehensions,是Python內置的非常簡單卻強大的可以用來創建list的生成式。
舉個例子,要生成list [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]可以用range(1, 11):
>>> range(1, 11)[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
但如果要生成[1x1, 2x2, 3x3, ..., 10x10]怎麼做?方法一是循環:
>>> L = []>>> for x in range(1, 11):... L.append(x * x)
...>>> L
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
但是循環太繁瑣,而列表生成式則可以用一行語句代替循環生成上面的list:
>>> [x * x for x in range(1, 11)]
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
寫列表生成式時,把要生成的元素x * x放到前面,後面跟for循環,就可以把list創建出來,十分有用,多寫幾次,很快就可以熟悉這種語法。
for循環後面還可以加上if判斷,這樣我們就可以篩選出僅偶數的平方:
>>> [x * x for x in range(1, 11) if x % 2 == 0]
[4, 16, 36, 64, 100]
還可以使用兩層循環,可以生成全排列:
>>> [m + n for m in 'ABC' for n in 'XYZ']
['AX', 'AY', 'AZ', 'BX', 'BY', 'BZ', 'CX', 'CY', 'CZ']
三層和三層以上的循環就很少用到了。
運用列表生成式,可以寫出非常簡潔的代碼。例如,列出當前目錄下的所有文件和目錄名,可以通過一行代碼實現:
>>> import os # 導入os模塊,模塊的概念後面講到>>> [d for d in os.listdir('.')] # os.listdir可以列出文件和目錄['.emacs.d', '.ssh', '.Trash', 'Adlm', 'Applications', 'Desktop', 'Documents', 'Downloads', 'Library', 'Movies', 'Music', 'Pictures', 'Public', 'VirtualBox VMs', 'Workspace', 'XCode']
for循環其實可以同時使用兩個甚至多個變數,比如dict的iteritems()可以同時迭代key和value:
>>> d = {'x': 'A', 'y': 'B', 'z': 'C' }>>> for k, v in d.iteritems():... print k, '=', v... y = B
x = A
z = C
因此,列表生成式也可以使用兩個變數來生成list:
>>> d = {'x': 'A', 'y': 'B', 'z': 'C' }>>> [k + '=' + v for k, v in d.iteritems()]
['y=B', 'x=A', 'z=C']
最後把一個list中所有的字元串變成小寫:
>>> L = ['Hello', 'World', 'IBM', 'Apple']>>> [s.lower() for s in L]
['hello', 'world', 'ibm', 'apple']
小結
運用列表生成式,可以快速生成list,可以通過一個list推導出另一個list,而代碼卻十分簡潔。
思考:如果list中既包含字元串,又包含整數,由於非字元串類型沒有lower()方法,所以列表生成式會報錯:
>>> L = ['Hello', 'World', 18, 'Apple', None]
>>> [s.lower() for s in L]
Traceback (most recent call last):
File "<stdin>", line 1, in <mole>AttributeError: 'int' object has no attribute 'lower'
使用內建的isinstance函數可以判斷一個變數是不是字元串:
>>> x = 'abc'>>> y = 123>>> isinstance(x, str)True>>> isinstance(y, str)False
請修改列表生成式,通過添加if語句保證列表生成式能正確地執行。