[英]How can I reference a string (e.g. 'A') to the index of a larger list (e.g. ['A', 'B', 'C', 'D', ...])?
[英]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.