繁体   English   中英

关于 python 列表中错误的快速提问 * 常量,例如 [a, b, c, d, e ] * x

[英]Quick question on error in python list * a constant e.g. [a , b, c, d , e ] * x

关于一个问题的快速提问是以前做过的。 这个问题给你一个从周一到周日的天数列表,你应该创建一个给定“n”(提前几天)的列表。 因此,如果 n = 2,则星期一将是星期三,依此类推。

我在 python 中尝试了这个,并得出了这个:

def after_n_days(days, n):
    day = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday'] * (int(n/7)+1)
    return [day[day.index(i) + n] for i in days]

after_n_days(["Monday","Friday","Wednesday"], 15)

但是,当我将列表“day”乘以 (int(n/7) + 1 when n= 15 and int(n/7) + 1 =3.虽然是 3 点,所以我想知道这里有什么问题?

非常感谢大家!!

这是错误信息

IndexError                                Traceback (most recent call last)
<ipython-input-124-481771160081> in <module>
      6 
      7 
----> 8 after_n_days(["Thursday", "Monday"], 4)
      9 after_n_days(["Monday","Friday","Wednesday"], 15)

<ipython-input-124-481771160081> in after_n_days(days, n)
      3 def after_n_days(days, n):
      4     day = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday'] * (int(n/7)+1)
----> 5     return [day[day.index(i) + n] for i in days]
      6 
      7 

<ipython-input-124-481771160081> in <listcomp>(.0)
      3 def after_n_days(days, n):
      4     day = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday'] * (int(n/7)+1)
----> 5     return [day[day.index(i) + n] for i in days]
      6 
      7 

IndexError:列表索引超出范围

问题是您没有将列表扩展得足够远。 列表乘以 1 只是列表。 任何一天,超出列表末尾的 n 个组合都会失败。 例如,

after_n_days(["Thursday", "Monday"], 4)
after_n_days(["Thursday", "Monday"], 7 + 4)
etc...

你可以让扩展列表更大

day = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 
        'Saturday', 'Sunday'] * (int(n/7)+2)

或者更好的是,使用模运算符来包装索引。

def after_n_days(days, n):
    print(int(n/7)+1)
    day = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 
            'Saturday', 'Sunday']
    return [day[(day.index(i) + n) % len(day)] for i in days]

after_n_days(["Thursday", "Monday"], 4)
after_n_days(["Monday","Friday","Wednesday"], 15)
after_n_days(["Monday","Friday","Wednesday"], 18)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM