我想计算从现在到明天12:00之间的秒数.所以我需要明天12:00 datetime对象.
这是伪代码:
today_time = datetime.datetime.now()
tomorrow = today_time + datetime.timedelta(days = 1)
tomorrow.hour = 12
result = (tomorrow-today_time).total_seconds()
Run Code Online (Sandbox Code Playgroud)
但它会引发这个错误:
AttributeError: attribute 'hour' of 'datetime.datetime' objects is not writable
Run Code Online (Sandbox Code Playgroud)
如何修改小时或如何获得明天的12:00 datetime对象?
所以这段代码是我想要的:
import datetime
d = datetime.date.today()
three_months_ago = d - timedelta(months=3)
Run Code Online (Sandbox Code Playgroud)
但是,正如我们所知,timedelta 中不存在 'months' 参数。
我承认我可以这样编程来实现目标:
if d.month > 3:
three_months_ago = datetime.date(d.year, d.month-3, d.day)
else:
three_months_ago = datetime.date(d.year-1, d.month-3+12, d.day)
Run Code Online (Sandbox Code Playgroud)
但这似乎真的很愚蠢......
你们能告诉我如何聪明地意识到这一点吗?
我从leetcode获取此代码.
class Solution(object):
def myPow(self, x, n):
if n == 0:
return 1
if n == -1:
return 1 / x
return self.myPow(x * x, n / 2) * ([1, x][n % 2])
Run Code Online (Sandbox Code Playgroud)
此代码用于实现poe(x, n),这意味着x**n在Python中.
我想知道为什么它可以实现pow(x, n).
它看起来没有意义......
我明白
if n == 0:
and
if n == -1:
Run Code Online (Sandbox Code Playgroud)
但核心代码:
self.myPow(x * x, n / 2) * ([1, x][n % 2])
Run Code Online (Sandbox Code Playgroud)
真的很难理解.
顺便说一句,这段代码仅适用于Python 2.7.如果你想在Python 3上进行测试,你应该改变
myPow(x*x, n / 2) * ([1, x][n % 2])
Run Code Online (Sandbox Code Playgroud)
至 …
所以我想这样做:
tuple([1])
Run Code Online (Sandbox Code Playgroud)
我期望的输出是:
(1)
Run Code Online (Sandbox Code Playgroud)
但是,我得到了这个:
(1,)
Run Code Online (Sandbox Code Playgroud)
但如果我这样做:
tuple([1,2])
Run Code Online (Sandbox Code Playgroud)
它完美无缺!像这样:
(1,2)
Run Code Online (Sandbox Code Playgroud)
这太奇怪了,我不知道为什么元组函数会导致这个结果.
请帮我修理一下.
所以我知道我可以使用pyinstaller.
然而,每次它引发错误时,它都会立即结束程序,所以我找不到错误是什么。
我知道我也许可以用来time.sleep(30000)阻止它。
但如果代码在遇到 之前引发错误time.sleep(30000),它就会关闭。
总结一下,如何让它一直不关机,以便我看看错误在哪里?
我的功能是这样的:
输入:
8
Run Code Online (Sandbox Code Playgroud)
输出:
['000', '001', '010', '011', '100', '101', '110', '111']
Run Code Online (Sandbox Code Playgroud)
所以这是创建一个列表来存储input_number从0开始的二进制数.这是我的代码(正确的版本):
import math
input_num = 8
max_bit = math.ceil(math.log(input_num, 2))
list_Bin = [None] * input_num
for i in range(input_num):
extra_d = max_bit - len(bin(i)[2:])
list_Bin[i] = '0'*extra_d + bin(i)[2:]
print(list_Bin)
Run Code Online (Sandbox Code Playgroud)
这段代码效果很好.但是,如果我改变一行代码:
list_Bin = [None] * input_num
Run Code Online (Sandbox Code Playgroud)
至
list_Bin = [] * input_num
Run Code Online (Sandbox Code Playgroud)
它会引发IndexError.
我真的很想知道为什么,因为我多次遇到过这个问题.
这是我的代码:
import datetime
date = datetime.date(2015,10,1)
today = datetime..today()
oneday = datetime.timedelta(days = 1)
date_counter = 0
while not date == today:
date_counter+=1
date += oneday
Run Code Online (Sandbox Code Playgroud)
在这段代码中,我使用while循环来实现我的目标 - 计算今天和用户选择的特定日期之间的天数.
但是,我想使用for循环来做同样的事情.可以改写吗?
所以我有几点经验:
>>>{2,3} - {2}
{3}
Run Code Online (Sandbox Code Playgroud)
这一个很完美.
但是,这个似乎不起作用:
>>> {{2,3},{4,3}} - {{4,3}}
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unhashable type: 'set'
Run Code Online (Sandbox Code Playgroud)
我认为它应该工作,
因为我使用一组包含两个元素,{2,3}和{4,3}到减去一个元素{4,3}.
尽管如此,它无法奏效.为什么?
我正在尝试按日期字符串进行分组并计算每个日期有多少数据。
首先,我将 ISOdate 转换为日期字符串:
db.test.aggregate([
{
$project: {
yearMonthDay: { $dateToString: { format: "%Y-%m-%d", date: "$file_date" } }
}
},
])
Run Code Online (Sandbox Code Playgroud)
结果:
到目前为止一切都很好,直到我这样做:
db.closing_nassau.aggregate([
{
$project: {
yearMonthDay: { $dateToString: { format: "%Y-%m-%d", date: "$detail.file_date" } }
}
},
{ $group: { date: "$yearMonthDay", count: { $sum: 1 } } },
])
Run Code Online (Sandbox Code Playgroud)
一直显示:
"message" : "字段‘日期’必须是累加器对象”
我认为这应该有效。我首先将 ISOdate 转换为日期字符串。我按日期字符串分组并计算每个日期。我尝试删除它count: { $sum: 1 },但它仍然显示相同的错误,因此问题出在分组依据上。
请随时询问更多信息以帮助我。
我想删除所有特殊字符,例如“|”、“.” 或字符串中的“$”。
这是我的代码:
string= '#$#&^&#$@||||123515'
re.sub(r'[^a-zA-Z0-9]', '', string)
print(string)
Run Code Online (Sandbox Code Playgroud)
输出:
#$#&^&#$@||||123515
Run Code Online (Sandbox Code Playgroud)
我知道这个正则表达式意味着删除除 number、az 和 AZ 之外的所有内容。
但它无法删除所有特殊字符。
有人能告诉我为什么吗?谢谢你!:)
我已经有一个方法几乎可以做到这一点:
from itertools import product
l = {1,2,3}
print(list(product(l,l)))
Run Code Online (Sandbox Code Playgroud)
输出是:
[(1, 1), (1, 2), (1, 3), (2, 1), (2, 2), (2, 3), (3, 1), (3, 2), (3, 3)]
Run Code Online (Sandbox Code Playgroud)
但是,我不想像(1,1),(2,2),(3,3)这样的集合
和(2,3),(3,2)应该只出现一次,因为它们在集合概念中是相同的.
所以我想要的输出是:
[(1, 2), (1, 3), (2, 1), (2, 3)]
Run Code Online (Sandbox Code Playgroud)
我怎样才能做到这一点?
这就是我想要的:
A = [1,2,3]
for a in A:
if a > 1:
del a
print(A)
Run Code Online (Sandbox Code Playgroud)
我希望列表a为[1],但它仍然是[1,2,3].
所以我的真正目标是删除我现在获得的当前元素.
我知道'del'有一种用法:
A = [1,2,3]
for i, a in enumerate(A):
if a > 1:
del A[i]
print(A)
Run Code Online (Sandbox Code Playgroud)
列表a将是[1,3]而不是[1].
因为我用的时候
del a[1] #2
Run Code Online (Sandbox Code Playgroud)
列表A中的orginally 3将需要使用索引1从列表A中获取它而不是使用2.因此我无法成功删除它.
如何删除列表中的当前元素?
python ×11
datetime ×2
list ×2
python-3.x ×2
set ×2
for-loop ×1
indexing ×1
mongodb ×1
python-2.x ×1
python-3.5 ×1
recursion ×1
regex ×1
tuples ×1
while-loop ×1