python - Python返回列表列表以查看值是否存在
问题描述
假设我有一个 2D 列表:
#0 #1 #start #end #holiday
lst=[[1,'a', False, False, False],
[3,'b', False, False, False],
[7,'c', False, True, False],
[0,'c', False, False, True],
[13,'d',True, False, False],
[21,'e',False, False, False],
[31,'f',False, False, False]]
(注意,这只是涉及时间的较大列表的一个非常简化的版本。开始是一周的开始,结束是一周的结束,它们是布尔值)
到目前为止,我所拥有的是它通过列表,如果 start 为 False,它会计算当前 #0 值与前行 #0 值之间的差异,并将其附加到格式中的当前行diff, D
。
如果 start 为真,则返回前一行的 End 值,如果为真,则计算当前行的 #0 与前一行的 #0 之间的差异,并以 format 附加到当前行diff, W
。如果前一个 End 为假,它只是追加No end defined
. 这是我本节的代码:
for row in lst:
row_index = lst.index(row)
if row_index == 0:
row.append('x')
if row[2]==False: # if not start of week
valBefore = lst[row_index-1][0]
valCurrent = lst[row_index][0]
diff = valCurrent-valBefore
row.append(str(diff)+', D')
else:
if lst[row_index-1][3] == True:
valBefore = lst[row_index-1][0]
valCurrent = lst[row_index][0]
diff = valCurrent - valBefore
row.append(str(diff)+', W')
else:
row.append('No end defined')
我想要做的是,如果 Start 为 true,但前一个 End 为 False,Holiday 为 True,它检查前一个,看看 End 是否为 True,如果是,它将计算该行的第 0 列与当前行的第 0 列之间的差异。如果 End 为 False 并且 Holiday 为 True,它将转到前一行并检查,依此类推。
我被困在这里的逻辑,我不确定去哪里以及如何做到这一点,希望这是有道理的。如果有人能指出我正确的方向,我将不胜感激!
我的预期结果:
lst=[[1,'a', False, False, False, ''],
[3,'b', False, False, False, '2, D'],
[7,'c', False, True, False, '4, D'],
[0,'c', False, False, True, 'Holiday'],
[13,'d',True, False, False, '6, W'],
[21,'e',False, False, False, '8, D'],
[31,'f',False, False, False, '10, D']]
解决方案
我建议你使用pandas
这样的问题:
import pandas as pd
df = pd.DataFrame(lst, columns=['0','1', 'start', 'end', 'hholiday'])
0 1 start end hholiday
0 1 a False False False
1 3 b False False False
2 7 c False True False
3 0 c False False True
4 13 d True False False
5 21 e False False False
6 31 f False False False
简化此操作的一种方法是使用np.where
,它允许您根据条件的结果选择值。以下应该按照您的意愿执行:
import numpy as np
if_true = np.where(df.end.shift().fillna(False),
df['0'] - df['0'].shift(),
'No end defined')
df['diff'] = np.where(df.start, if_true, df['0'] - df['0'].shift())
print(df)
0 1 start end hholiday diff
0 1 a False False False nan
1 3 b False False False 2.0
2 7 c False True False 4.0
3 0 c False False True -7.0
4 13 d True False False No end defined
5 21 e False False False 8.0
6 31 f False False False 10.0
推荐阅读
- django - 尝试使用 Django 电子邮件确认来验证用户,但是一些用户在尝试确认他们的电子邮件时收到此错误
- amazon-web-services - 带有亚马逊 WorkMail SMTP 接口的 Nodemailer 与 SES
- google-drive-api - 为由 Google Drive API 创建的共享云端硬盘创建权限
- ansible - 无法从具有较旧 ansible 版本和 python 2.x 的 rhel 机器访问 json
- python - KeyError: '\x00' 时 unpickling 一个对象
- php - ORA-00900: php 中的 SQL 语句无效,但在 sqlplus 中有效
- python - 如何通过 struct.pack 发送 char 数组的有效负载?
- mysql - MySQL中每个月的每日运行总计
- python - AttributeError:“PostDetailView”对象没有属性“方法”
- python - 在 python 类 init 函数中运行 for 循环以在我的类中保存多个不同的 self.example 变量