簡體   English   中英

遍歷多個列表?

[英]Looping through multiple lists?

在我的程序中,我掌握了當前時間。 然后,我想檢查當前時間是否大於t1且小於t2。 例如:

00,00 <= dt.time() <= 06,00
06,01 <= dt.time() <= 12,00
12,01 <= dt.time() <= 18,00 
etc...

我正在做的是檢查當前時間是哪一天的時間。

如果4個語句中的一個最終為true,則我的程序將轉到另一個函數。

現在,我的程序的行為就像所有4條語句都為真,並且循環了幾次。

當我打印所有內容以查看其功能時,看起來好像只是將t1中的4個對象中的每一個與t2中4個對象中的最后一個進行了比較。

有沒有辦法正確地做到這一點?

這是我正在做的...

from datetime import datetime, date, time

p1 = 1
p2 = 2
p3 = 3
p4 = 4

what_number_should_be = 3

def cycle():
    dt = datetime.now()
    t1 = [time(00,00), time(06,01), time(12,01), time(18,01)]
    t2 = [time(06,00), time(12,00), time(18,00), time(23,59)]
    user_number = [p1, p2, p3, p4]

    # I think the next 3 lines are throwing me off
    for x in t1:
        for y in t2:
            for z in user_number:

                # check if current date is between times listed in t1 and t2
                if x <= dt.time() <= y:
                    print(x, dt.time(), y)
                    print(z)
                    # if above is true, then check
                    # if user_number does not equal 3
                    if what_number_should_be != z:
                        print(z, " did not equal ", what_number_should_be)
                        # should only end up here once

cycle()

如果我對問題的理解正確,則可以將3個for循環替換for

for x, y, z in zip(t1, t2, user_number):

Zip為您提供了每個列表中的相應元素: zip文檔

您可以將t1,t2和user_number數組壓縮在一起,這將導致一個元組列表

[(time(00,00), time(06,00), p1), (time(06,01), time(12,00), p2), (time(12,01), time(18,00), p3), (time(18,01), time(23,59), p4)]

然后像這樣運行循環

for x in zip(t1, t2, user_number):
    if x[0] <= dt.time() <= x[1]:
        print(x[0], dt.time(), x[1])
        print(x[2])
        if what_number_should_be != x[2]:
            print(x[2], " did not equal ", what_number_should_be)

如果我正確理解,對於給定的時間dt ,您想要確定其所在日期的“象限”,您已選擇以以下方式對其進行編碼:

  • 如果dt介於00,00和06,00之間,則它在象限1
  • 如果dt介於06,01和12,00之間,則它位於第2象限
  • 如果dt介於12,01和18,00之間,則它在第3象限中
  • 如果dt介於18,01和23,59之間,則它位於第4象限

我還收集到您希望您的for循環僅輸出3因為您恰巧在12,01到18,00之間實時運行此程序。

如果我對問題的理解是正確的,則可以聰明地使用兩個數組來完成此任務,我們可以使用它們來發現解決方案。 通過觀察,因為我們要檢查dt是否包含4個象限,所以我們可以推斷出只需要重復4次,每個象限重復一次。

可以這樣寫:

dt = datetime.now()
t1 = [time(00,00), time(06,01), time(12,01), time(18,01)]
t2 = [time(06,00), time(12,00), time(18,00), time(23,59)]

for quadrant in range(4):
    if (t1[quadrant] <= dt and dt <= t2[quadrant]):
        print("The current time is in quadrant: {0}".format(quadrant))

我希望這會有所幫助!

暫無
暫無

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

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