Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/visual-studio-2010/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
String python中二维列表的元素操作_String_Multidimensional Array_Python 3.6_Win32com - Fatal编程技术网

String python中二维列表的元素操作

String python中二维列表的元素操作,string,multidimensional-array,python-3.6,win32com,String,Multidimensional Array,Python 3.6,Win32com,我正在写一个剧本,为三个人安排会面时间。我设法以二进制格式对他们的忙/闲状态进行编码,在接下来的三天中,0空闲,1忙碌,增量为30分钟。我按天将它们的状态分组到字典格式中,如下所示 print(date_schedule) {'Monday, 2020-02-03': ['000000000000000000101101001110110000000000000000', '000000000000000000001111011100001100000000000000', '00000

我正在写一个剧本,为三个人安排会面时间。我设法以二进制格式对他们的忙/闲状态进行编码,在接下来的三天中,0空闲,1忙碌,增量为30分钟。我按天将它们的状态分组到字典格式中,如下所示

print(date_schedule)
{'Monday, 2020-02-03': ['000000000000000000101101001110110000000000000000',
  '000000000000000000001111011100001100000000000000',
  '000000000000000011110100011000110000000000000000'],
 'Tuesday, 2020-02-04': ['000000000000000000100010000000000000000000000000',
  '000000000000000000001111001000110000000000000000',
  '000000000000000011111000111100101000000000000000'],
 'Wednesday, 2020-02-05': ['000000000000000000111000000000000000000000000000',
  '000000000000000001001100110000000000000000000000',
  '000000000000000000111100000001001000000000000000']}
目标:将那些0转换为一个30分钟间隔的区块

For Example: 00:00----00:30
             00:30----01:00
                   ...
             23:30----24:00
尝试:

#Separate the code into a two dimensional list
schedule = date_free.values()

#Append the block to a new list.
free = []
for value in schedule:
   for v in value:
       for idx, time in enumerate(v):
           if time == '0':
                idx = idx/2
                end = idx + 0.5
                #5 slots, and two decimals
                idx = '{:05.2f}'.format(idx).replace('.50','.30').replace('.',':')
                end =  '{:05.2f}'.format(end).replace('.50','.30').replace('.',':')
                free.append((idx + '----' + end))
问题:free有372个元素,我不知道如何使它成为一个二维列表结构,就像以前在计划中一样(因为每个v的0的数量不同)。是否有办法不创建新列表,而是直接将上述逻辑元素应用于计划

奖金问题:我还没有达到目标,但我的下一个目标是找到每天30个时间段的交点,如下面的随机示例所示。如果你有任何建议,请告诉我

print(date_time_final)
{'Monday, 2020-02-03': ['08:00----08:30','09:30----10:00','12:00----12:30'],
'Tuesday, 2020-02-04' : ['09:00----09:30','10:30----11:00','13:00----13:30','14:00----14:30']
'Wednesday, 2020-02-05' : ['07:00----07:30','14:30----15:00','15:00----15:30','19:00----19:30']}

提前感谢您的帮助

像这样的东西是你想要的吗

schedule = {'Monday, 2020-02-03': ['000000000000000000101101001110110000000000000000',
  '000000000000000000001111011100001100000000000000',
  '000000000000000011110100011000110000000000000000'],
 'Tuesday, 2020-02-04': ['000000000000000000100010000000000000000000000000',
  '000000000000000000001111001000110000000000000000',
  '000000000000000011111000111100101000000000000000'],
 'Wednesday, 2020-02-05': ['000000000000000000111000000000000000000000000000',
  '000000000000000001001100110000000000000000000000',
  '000000000000000000111100000001001000000000000000']}

combined = {}
for value in schedule:
    day = {}
    for v in schedule[value]:
        for idx, time in enumerate(v):
            idx = idx/2
            end = idx + 0.5
            #5 slots, and two decimals
            idx = '{:05.2f}'.format(idx).replace('.50','.30').replace('.',':')
            end =  '{:05.2f}'.format(end).replace('.50','.30').replace('.',':')

            if time == '0':
                try: #Only assigns "True" if value does not yet exist and is not already False
                    if day[idx + '----' + end] == False:
                        pass
                    else:
                        day[idx + '----' + end] = True
                except:
                    day[idx + '----' + end] = True
            elif time == '1':
                day[idx + '----' + end] = False
    combined[value] = day

for day in combined:
    print(day)
    for time_slot in combined[day]:
        print("Time slot %s is free = %s" % (time_slot, str(combined[day][time_slot])))
我没有使用列表,而是使用字典格式按日期和时间段进行排序,保留记录中的每个时间段,但给它们一个布尔值来确定它是否空闲。(真==空闲,假==忙)
这样,您可以对输出执行任何您喜欢的操作。

当我执行上述代码时,我没有得到372个值,只有12:一个带有字符串元素的列表
'00:00---00:30'
12x。我必须确认几个假设:1)我假设每天的3个二进制序列是3个不同的人的忙/闲状态?其次,我假设您希望列表只显示那些空闲时间,其中所有3个人都是空闲的,现在您只需将空闲时间添加到列表中,但我假设您的问题是,如果第一个被解析的人是空闲的,而下一个不是,您还需要追溯删除该项?@tst:是的,您所有的假设都是正确的。最后,我编写了一个函数,只将每个二进制字符串的“0”转换为时间块,并使用“functools”模块中的“reduce”函数查找这些零时间块的交点,从而解决了这个问题。这正是我要寻找的,只是用了不同的方法解决了。我从来没有想到嵌套字典。谢谢你给我看这个。我有几个问题,你有什么例外?您能否解释一下如何检查time='0'是否还不存在。非常感谢。另外,为什么在if语句中需要try和except块?如果时间='0',为什么不能直接设置day[idx+'-'+end]=True;如果时间='1',为什么不能直接设置day[idx+'-'+end]=False。我试图捕获的异常是keyrerror。如果time==0,并且是您第一次进入循环时,检查键值的If语句将抛出异常,因为键还不存在。