簡體   English   中英

為什么以下列表理解在Python中不起作用?

[英]Why is the following list comprehension not working in Python?

我有一個名為row的列表:

row = ['1234', [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31]]

我想更改row[1] ,以便少數數字被替換為時間,其余數字被替換為字符串'ABS' 像這樣的東西:

['1234', ['ABS', 'ABS', 'ABS', 'ABS', 'ABS', 'ABS', 'ABS', '09:54:59', '09:55:18', 'ABS', 'ABS', 'ABS', 'ABS', 'ABS', 'ABS', 'ABS', 'ABS', 'ABS', 'ABS', 'ABS', 'ABS', 'ABS', 'ABS', 'ABS', 'ABS', 'ABS', 'ABS', 'ABS', 'ABS', 'ABS', 'ABS']]

這是我的代碼:

for obj in row_objs:
    row[1] = [str(obj.punch.time()) if x==obj.punch.day else 'ABS' for x in row[1]]

但我繼續使用上面的代碼將所有數字替換為'ABS'。

當我這樣做:

for obj in row_objs:
    row[1] = [str(obj.punch.time()) if x==obj.punch.day else x for x in row[1]]

時間安排正確,但其他數字仍然存在。

['1234', [1, 2, 3, 4, 5, 6, 7, '09:54:59', '09:55:18', 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31]]

這里出了什么問題?

在每次迭代時替換列表。 for循環中的最后一個obj與任何整數都不匹配,因此最終結果是您生成的列表只包含'ABS'字符串。 您的第二個循環有效,因為您通過重新使用x來獲取已經替換的值; 可以是原始整數,也可以是更晚的time()替換。

不要使用for循環。 在將day屬性映射到str(...time())結果的字典中收集所有obj.punch值,然后使用列表obj.punch來查找匹配:

days = {obj.punch.day: str(obj.punch.time()) for obj in row_objs}
row[1] = [days.get(x, 'ABS') for x in row[1]]

現在你只需將row[1]替換一次。

for obj in row_objs:
    row[1] = [str(obj.punch.time()) if x == obj.punch.day else isinstance(x, int) and 'ABS' or x for x in row[1]]

暫無
暫無

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

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