我正在终端窗口中的脚本中打印出一些值,如下所示:
for i in items:
print "Name: %s Price: %d" % (i.name, i.price)
Run Code Online (Sandbox Code Playgroud)
如何将这些排列成列?
我有一个看起来像这样的脚本:
#!/usr/bin/env python
# encoding: utf-8
import time, random, os, multiprocessing
def main():
NPROCESSES = 5
pool = multiprocessing.Pool(processes=NPROCESSES)
a = [1,2,3,4,5,6,7,8,9,0]
for _ in pool.imap_unordered(do_task, a):
pass
def do_task(n):
try:
might_crash(n)
except Hell, e:
print e, " crashed."
def might_crash(n):
time.sleep(3*random.random())
if random.randrange( 3 ) == 0:
raise Hell(n)
print n
class Hell(Exception):
pass
if __name__=="__main__":
main()
Run Code Online (Sandbox Code Playgroud)
此脚本通常会打印'a'中的值,但might_crash()会随机引发异常.
我想捕获这些异常并将当前的do_task()放回队列中以便稍后重试.
如果当前任务失败,如何将当前任务放回队列?
我有一个正在运行的django/apache2 + memcached应用程序(ubuntu),并希望跟踪登录的在线用户.
追踪这个的最佳方法是什么?
每次登录用户加载页面时,我宁愿不写入数据库; 但还有其他选择吗?
在我的首页模板中,我使用缓存函数,如下所示:
{% cache 86400 my_posts %}
{% get_latest_posts %}
{% endcache %}
Run Code Online (Sandbox Code Playgroud)
当有新帖子时我想使缓存密钥失效; 像这样:
def clear_post_cache():
cache.delete('my_posts')
post_save.connect(clear_post_cache, sender=Post)
Run Code Online (Sandbox Code Playgroud)
我的问题是缓存键不能作为'my_posts'访问.如何找到密钥名称?
这个函数来自"编程集体智慧"一书,并且应该计算p1和p2的Pearson相关系数,它应该是介于-1和1之间的数字.
如果两个评论家对项目的评价非常相似,那么函数应该返回1,或接近1.
有了真实的用户数据,我有时会得到奇怪的结果.在以下示例中,数据集critics2应返回1 - 而不是返回0.
有没有人发现错误?
(这不是"编程集体智慧"中这个python函数有什么问题的重复)
from __future__ import division
from math import sqrt
def sim_pearson(prefs,p1,p2):
si={}
for item in prefs[p1]:
if item in prefs[p2]: si[item]=1
if len(si)==0: return 0
n=len(si)
sum1=sum([prefs[p1][it] for it in si])
sum2=sum([prefs[p2][it] for it in si])
sum1Sq=sum([pow(prefs[p1][it],2) for it in si])
sum2Sq=sum([pow(prefs[p2][it],2) for it in si])
pSum=sum([prefs[p1][it]*prefs[p2][it] for it in si])
num=pSum-(sum1*sum2/n)
den=sqrt((sum1Sq-pow(sum1,2)/n)*(sum2Sq-pow(sum2,2)/n))
if den==0: return 0
r=num/den
return r
critics = {
'user1':{
'item1': 3,
'item2': 5,
'item3': 5, …Run Code Online (Sandbox Code Playgroud) 如何更改降价滤镜中的默认行为,以便将换行符转换为br标记?
这是有问题的功能.它计算p1和p2的Pearson相关系数,它应该是介于-1和1之间的数字.
当我将它与真实用户数据一起使用时,它有时会返回一个大于1的数字,如下例所示:
def sim_pearson(prefs,p1,p2):
si={}
for item in prefs[p1]:
if item in prefs[p2]: si[item]=1
if len(si)==0: return 0
n=len(si)
sum1=sum([prefs[p1][it] for it in si])
sum2=sum([prefs[p2][it] for it in si])
sum1Sq=sum([pow(prefs[p1][it],2) for it in si])
sum2Sq=sum([pow(prefs[p2][it],2) for it in si])
pSum=sum([prefs[p1][it]*prefs[p2][it] for it in si])
num=pSum-(sum1*sum2/n)
den=sqrt((sum1Sq-pow(sum1,2)/n)*(sum2Sq-pow(sum2,2)/n))
if den==0: return 0
r=num/den
return r
critics = {
'user1':{
'item1': 3,
'item2': 5,
'item3': 5,
},
'user2':{
'item1': 4,
'item2': 5,
'item3': 5,
}
}
print sim_pearson(critics, 'user1', 'user2', )
1.15470053838
Run Code Online (Sandbox Code Playgroud) 给定这样的模型结构:
class Book(models.Model):
user = models.ForeignKey(User)
class Readingdate(models.Model):
book = models.ForeignKey(Book)
date = models.DateField()
Run Code Online (Sandbox Code Playgroud)
一本书可能有几本书Readingdate.
如何列出Readingdate特定年份内至少有一本书?
我可以做这个:
from_date = datetime.date(2010,1,1)
to_date = datetime.date(2010,12,31)
book_ids = Readingdate.objects\
.filter(date__range=(from_date,to_date))\
.values_list('book_id', flat=True)
books_read_2010 = Book.objects.filter(id__in=book_ids)
Run Code Online (Sandbox Code Playgroud)
是否可以使用一个查询集执行此操作,还是这是最好的方法?
我正在python/django建立一个网站,想要预测用户提交是否有效或者是垃圾邮件.
用户对其提交的内容具有接受率,如本网站所示.
用户可以审核其他用户的提交内容; 这些调节后来由管理员进行元模式化.
鉴于这种:
如何预测A的帖子被垃圾邮件的可能性?
编辑:我制作了一个模拟这种情况的python脚本:
#!/usr/bin/env python
import random
def submit(p):
"""Return 'ham' with (p*100)% probability"""
return 'ham' if random.random() < p else 'spam'
def moderate(p, ham_or_spam):
"""Moderate ham as ham and spam as spam with (p*100)% probability"""
if ham_or_spam == 'spam':
return 'spam' if random.random() < p else 'ham'
if ham_or_spam == 'ham':
return 'ham' if random.random() < p else 'spam'
NUMBER_OF_SUBMISSIONS = 100000
USER_A_HAM_RATIO = 0.6 # Will submit 60% ham
USER_B_PRECISION = …Run Code Online (Sandbox Code Playgroud) 在python中有更快的方法吗?
[f for f in list_1 if not f in list_2]
Run Code Online (Sandbox Code Playgroud)
list_1和list_2都包含大约120,000个字符串.生成新列表大约需要4分钟.