如果我在每个循环的生成器中完成了2或3个相同的计算,有没有办法将它们设置为变量?
一个简单的例子是这样的:
#Normal
[len( i ) for i in list if len( i ) > 1]
#Set variable
[x for i in list if x > 1; x = len( i )]
Run Code Online (Sandbox Code Playgroud)
在任何人说len( i )这么快之前,差异可以忽略不计,我也意味着进行其他计算,使用len只是让它更容易阅读.另外,如果有办法,你会如何设置多个变量?
如果以前曾被问过,请道歉,但我已经四处寻找并没有找到任何东西.
我有一个循环:
total = 0
for s in sums:
total += s[0]
Run Code Online (Sandbox Code Playgroud)
这里sums是从数据库中,通过Django的检索对象的列表:
sums = Source_types.objects.values_list('source_sum')
Run Code Online (Sandbox Code Playgroud)
我想将此代码移动到单行生成器中.
我正在研究一个随机密码生成器,我希望有一个用户可以输入的基本字符串,并在基本字符串内部或周围生成随机字符.我的问题是,只要它用基本字符串生成随机字符,它们就会插入前面(第0个索引).这是我的代码:
import UIKit
class ViewController: UIViewController {
@IBOutlet weak var baseStringTextField: UITextField!
@IBOutlet weak var lowerCaseSwitch: UISwitch!
@IBOutlet weak var upperCaseSwitch: UISwitch!
@IBOutlet weak var numberSwitch: UISwitch!
@IBOutlet weak var numberOfCharactersSlider: UISlider!
@IBOutlet weak var numberOfCharsLabel: UILabel!
let lower = ["a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t","u","v","w", "x", "y", "z"]
let upper = ["A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z"]
let numbers = ["1", "2", "3", "4", "5", "6", "7", "8", "9", "0"] …Run Code Online (Sandbox Code Playgroud) 我试图创建一个生成器,它将寻找1到m范围内的n个随机整数.下面的代码完全相同,但它有时会返回先前打印过的数字的两倍.有谁知道我怎么编辑它?另一件事,但更设计的是,我如何订购我的打印,以便数字有序?
import random
def hwset(m,n):
i=0
for i in range(0,n):
print random.randrange(1,m+1,1)
Run Code Online (Sandbox Code Playgroud) 我试过下面的函数使用co和javascript promise测试,fulfill会成功返回但是reject没有,并且捕获错误未定义.并且流程无法继续.为什么?
错误:
> at GeneratorFunctionPrototype.next (native)
at onFulfilled (/Users/../project/app/node_modules/co/index.js:65:19)
at runMicrotasksCallback (node.js:337:7)
at process._tickDomainCallback (node.js:381:11)
Run Code Online (Sandbox Code Playgroud)
码:
domain.run(function() {
var testPromise = function() {
return new Promise(function (fulfill, reject){
//reject('error');
reject(new Error('message'));
});
};
co(function *() {
var d = yield testPromise();
console.log(d);
res.send('fin');
}).catch(onerror);
function onerror(error) { console.error(error.stack); }
});
domain.on('error', function(error) { console.error(error); });
Run Code Online (Sandbox Code Playgroud) 在不关心返回值的情况下执行完整生成器理解的最pythonic方法是什么,而操作纯粹是基于副作用的?
一个例子是基于这里讨论的谓词值来拆分列表.想到编写生成器理解是很自然的
split_me = [0, 1, 2, None, 3, '']
a, b = [], []
gen_comp = (a.append(v) if v else b.append(v) for v in split_me)
Run Code Online (Sandbox Code Playgroud)
在这种情况下,我能想出的最佳解决方案是使用 any
any(gen_comp)
Run Code Online (Sandbox Code Playgroud)
然而,对于没有看过这种模式的人来说,这并不是很明显.是否有更好的方法来循环完全理解而不保留内存中的所有返回值?
假设我有一个列表:
my_list = range(10)
Run Code Online (Sandbox Code Playgroud)
而且我想计算列表中有多少偶数.请注意,我对这些值不感兴趣,我只想要它们的数量.所以我可以:
len( [0 for i in my_list if i % 2 == 0] ) # Method 1
len( [i for i in my_list if i % 2 == 0] ) # Method 2
len( [_ for i in my_list if i % 2 == 0] ) # Method 3
Run Code Online (Sandbox Code Playgroud)
从速度或内存的角度来看,上述任何一种方法都比其他方法更好吗?
实际上我甚至不需要构建列表,但我不想:
counter = 0
for item in my_list:
if item % 2 == 0:
counter += 1
Run Code Online (Sandbox Code Playgroud)
那么,哪一个是用发电机计数的好方法?
PS:我的案例中的列表有更多内存繁重的项目,这就是为什么我想要尽可能优化.
我有一个素数生成器,我很好奇看到有多小和我有多快可以让素数生成器基于优化等等:
from math import sqrt
def p(n):
if n < 2: return []
s = [True]*(((n/2)-1+n%2)+1)
for i in range(int(sqrt(n)) >> 1):
if not s[i]: continue
for j in range( (i**i+(3*i) << 1) + 3, ((n/2)-1+n%2), (i<<1)+3): s[j] = False
q = [2]; q.extend([(i<<1) + 3 for i in range(((n/2)-1+n%2)) if s[i]]); return len(q), q
print p(input())
Run Code Online (Sandbox Code Playgroud)
发电机很棒!它速度超快,可以随意试用.但是,如果您输入的数字大于10 ^ 9或10 ^ 10(我认为),它将从内存错误中崩溃.我无法弄清楚如何扩展它使用的内存,以便它可以占用所需的内存.任何建议将不胜感激!
我的问题与此问题非常相似,但这是Python,而不是C.
编辑:这是我尝试运行10 ^ 9时获得的与内存相关的回溯之一.
python prime.py
1000000000
Traceback (most recent call last):
File "prime.py", line 9, …Run Code Online (Sandbox Code Playgroud) 我一直在这里阅读CSV模块上的Python文档:https://docs.python.org/2/library/csv.html
我注意到它没有提到任何方式让读者对象返回它当前正在读取的行数,或者它当前处于哪个迭代.这似乎是一个广泛需要的功能.所以,我想知道如何做到这一点:
reader = csv.DictReader(readFile)
for row in reader:
# do something
# now want to find the line number that row corresponds to
Run Code Online (Sandbox Code Playgroud)
或者,如果不可能,为什么会这样.
我有一个字符串列表.我希望打印出符合条件的列表中的字符串.清单如下:
In [5]: L = ["John and Mary", "Leslie", "Iva and Mark Li"]
Run Code Online (Sandbox Code Playgroud)
我希望打印出L中的每个字符串,其中包含一个字符串and-
'John and Mary', 'Iva and Mark Li'
Run Code Online (Sandbox Code Playgroud)
我有以下代码:
In [6]: def grep(pattern, line):
if pattern in line:
print line
In [7]: [grep("and", I) for I in L]
Run Code Online (Sandbox Code Playgroud)
这回来了
John and Mary
Iva and Mark Li
Out[7]: [None, None, None]
Run Code Online (Sandbox Code Playgroud)
什么是正确的方法呢?谢谢!!