簡體   English   中英

有pythonic風格和列表理解的麻煩

[英]Having trouble with pythonic style and list comprehension

我昨天用Python編寫了一個小腳本,這不是我的主要語言,它給我留下了一些關於如何以適當的'pythonic'風格做事的問題。 任務很簡單,我有兩個數組fieldnamesvalues 想象一下他們的內容是什么

fieldnames = ['apples','oranges','pears','bananas']
values = [None,2,None,5]

我需要創建一個只包含與非None值對應的索引的字段數組。 目前我這樣做:

#print fieldnames
usedFieldnames = []

for idx,val in enumerate(values):
    if val is not None:
        usedFieldnames.append(fieldnames[idx])

我可能是錯的,但這對我來說似乎是非pythonic,我想知道是否有一個更適合python的方法來實現這一點與列表理解。 任何幫助,將不勝感激。

你可以使用zip()

>>> fieldnames = ['apples','oranges','pears','bananas']
>>> values = [None,2,None,5]
>>> [field for field, value in zip(fieldnames, values) if value is not None]
['oranges', 'bananas']

如果你使用python2.x而不是zip() ,它創建一個帶有壓縮列表的新列表,你可以采用“迭代”方法並使用itertools.izip()

>>> from itertools import izip
>>> [field for field, value in izip(fieldnames, values) if value is not None]
['oranges', 'bananas']

在python3.x的情況下, zip()返回一個迭代器,而不是一個列表。

您可以使用enumerate來遍歷列表並同時獲取當前項的索引。

print [idx for idx, field in enumerate(fieldnames) if values[idx] is not None]
# [1, 3]

如果你想要字段名,那么

print [field for idx, field in enumerate(fieldnames) if values[idx] is not None]
# ['oranges', 'bananas']

使用python3中的列表解析在列表中存儲偶數的示例:

even_number_collection = [ num for num in range(20) if num%2==0]

# one way to print above list
print(*even_number_collection,sep=" ")

# another way
for a in even_number_collection:
    print(a, end=" ")

你可以在這里閱讀https://www.geeksforgeeks.org/python-list-comprehension-and-slicing/

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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