我正试图想出一种优雅的方法,从一个函数中创建一个列表,该函数生成Python和Ruby中的值。
在Python中:
def foo(x):
for i in range(x):
if bar(i): yield i
result = list(foo(100))
在Ruby中:
def foo(x)
x.times {|i| yield i if bar(i)}
end
result = []
foo(100) {|x| result << x}
虽然我喜欢在这两种语言中工作,但是Ruby版本需要初始化列表然后填充列表,这让我感到有些困扰。Python
我不太明白Python的分支复盖率统计数据想告诉我什么。给定表单的代码
def f(a, b):
c = (i for i in a)
d = (j for j in b) # Line of interest
return dict(zip(c, d))
print(f(['a', 'b'], [1, 2]))
它是在单元测试期间导入的,Python的标准分支覆盖范围告诉我只覆盖了部分退出行(在CLI输出中为n->-n,在pretty html报告中为“n ↛ # Line of interest”)。
返回的dict被清晰地
我认为我很清楚在Python中变量和生成器是如何工作的。
然而,下面的代码让我感到困惑。
from __future__ import print_function
class A(object):
x = 4
gen = (x for _ in range(3))
a = A()
print(list(a.gen))
当运行代码(Python 2)时,它说:
追溯(最近一次调用):文件"Untitled 8.py",第10行,打印(列表(a.gen))文件"Untitled 8.py",第6行,in gen = (x for _ in r
我是Python新手,我试图生成一个包含整数介于1到9之间的4个随机数的列表。该列表必须不包含重复整数。
我的问题是,程序没有输出准确的4个数字,每次。有时它会生成3个数字或2个数字,而我不知道如何修正它。
我的代码:
import random
lst = []
for i in range(5):
r = random.randint(1,9)
if r not in lst: lst.append(r)
print(lst)
有没有办法不用random.sample来做这件事?这段代码是学校更大作业的一部分,我的老师不希望我们使用random.sample或rando
我已经为Python中的一个简单问题编写了以下代码-
def Peu1(numbers):
"Sum of all the multiples of 3 or 5 below 1000."
for num in range(numbers):
if num%3 == 0 or num%5 == 0:
test = sum(range(numbers),0)
return test
print Peu1(1000)
我想把它改为列表理解,我写了以下内容-
test = [sum(range(numbers)
看看下面的代码,它显示了一个列表理解。
>>> i = 6
>>> s = [i * i for i in range(100)]
>>> print(i)
在Python2.6中执行代码示例时,它会打印99,而在Python3.x中执行它时会打印6。
改变行为的原因是什么,以及为什么Python3.x中的输出6
提前谢谢你!
每当我试图在python中创建一个空列表时,我就会意识到,如果我不知道并定义它的范围,我就无法在R中为我想要的任何标识设置一个值。
q = list()
q[ 2 ] = 9
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
IndexError: list assignment index out of range
但在R中,这种情况不会发生。
Q = c( )
Q[ 4 ] = 3
>>> [1] NA NA 4
在python中有类似
要在现有列表中复制嵌套列表,不幸的是,仅仅将其乘以是不够的,否则列表中将创建引用而不是独立的列表,请参见下面的示例:
x = [[1, 2, 3]] * 2
x[0] is x[1] # will evaluate to True
要实现您的目标,可以在列表理解中使用range函数,例如,请参阅以下内容:
x = [[1, 2, 3] for _ in range(2)]
x[0] is x[1] # will evaluate to False (wanted behaviour)
这是一个很好的方法,以增加列表中的项目,而不只是创建参考,这也是解释多次在许多不同的网站。
但是,有一种更
我在Windows上使用Python 3.3.1 64位,下面的代码片段是:
len ([None for n in range (1, 1000000) if n%3 == 1])
在136 to中执行,与此相比:
sum (1 for n in range (1, 1000000) if n%3 == 1)
在146 in内执行。在这种情况下,生成器表达式不应该比列表理解速度更快吗?
我引用Guido van Rossum 的话
Python3中的...both列表理解和生成器表达式实际上比Python2快!(两者之间不再存在速度差异。)
编辑:
我用timeit测量了时间。我知道
我想做下面的Matlab代码:
indexes=find(data>0.5);
data2=data(indexes(1):indexes(length(indexes))+1);
在Python中,所以我做到了:
indexes=[x for x in data if x>0.5]
init=indexes[1]
print(indexes)
end=indexes[len(indexes)]+1
data2=data[init:end]
但我发现了一个错误:
End=indexeslen(索引)+1 IndexError:超出范围的列表索引
我认为Python中的索引可
我在python2.7.12中有一个函数,它从函数f(x)生成一个列表,并取最大值,如下所示:
max( [f(x) for x in range(n)] )
现在,我希望在列表的任何元素大于B的情况下中止列表的生成,并返回该元素。结果将与执行以下操作相同:
v = -float("inf")
for x in range(n):
v = max( v, f(x) )
if v > B: return v
return v
问题是for -循环,虽然生成的元素较少,但运行速度比我目前正在处理的问题的列表理解慢。有没有一种方法可以使用列表理解或类似的生成器方
我是Python新手,所以请耐心地容忍我。这段代码片段来自于"Python烹饪书“一书,其中介绍了如何从非hashable集合中删除dups。
def dedup(items, key=None):
seen = set()
for item in items:
val = item if key is None else key(item)
if val not in seen:
yield val
seen.add(val)
if __name__ == '__main__
我试图找出一个数字是否落在一个范围内,范围的一个或两个数字都可以浮动。
也就是。
if x in range(0.5, 3.5):
pass
我理解范围只接受整数
那么,我如何在python中找到一个或两个浮动的范围。我四处搜索,发现了frange()和numpy.linspace()。然而,前者似乎是为了增加一个浮点数,而linspace只是在一个范围之间创建一个数字列表。所有的解决方案要么希望地板除法为10,要么与增量有关。
我已经看过这里了,,而不是我的问题。
谢谢。
在D中有关于函数式编程的文章和演示文稿(例如)。我以前从未使用过D,但我有兴趣尝试一下。有没有一种方法可以用D编写类似以下Python表达式的代码:
max(x*y for x in range(N) for y in range(x, N) if str(x*y) == str(x*y)[::-1])
是否有用于生成器或列表(数组)理解的D构造?
我是个初学者。
您能告诉我为什么这个脚本在中工作,即使变量在ip not in i情况下没有定义?
该脚本比较了ARP表match_data列表(我从paramiko连接获得的)和我的ip列表match_ip。我只想打印IP MAC,如果IP不在print ip + "NO MAC ADDRESS"的ARP列表表中。
for ip in match_ip:
for i in match_data:
if ip in i:
print re.search((ip+'\s+'),i).group(0),mac.sea
关于Python的最佳实践,我有一个简短的问题。我看到了lambda + filter函数用于列表理解的地方,但我想知道是否有更容易的方法在列表中找到特定元素,而不需要在整个列表中生成和迭代。
使用AWS boto3库,我使用列表理解来查询各种get_x()函数:
[i['domainName'] for i in domain_names['items'] if re.search(r'\b'+domain_name, i['domainName'])].pop()
[i['id'] for i in usage
我是python 3的新手&我的谷歌搜索一直没有成效。有没有办法这样写:
for x in range(10):
print(x)
如下所示:
print(x) for x in range(10)
我不想像arr = [x for x in X]列表理解语法那样返回列表。
编辑:实际上,我并不是在涉及print()的具体案例中,我感兴趣的是一个通用的pythonic句法结构
method(element) for element in list
我正在尝试使用列表理解来初始化一个二维列表,但是我在Python 2和Python 3中看到了不同的结果,我不知道为什么。示例代码( import只是为了在v2中使用v3打印语句):
from __future__ import print_function
ROW = 3
COL = 3
myList = [0 for i in range(ROW)]
#print('myList1 =', myList, 'len =', len(myList))
for i in range(len(myList)):
#print('i
我有个计划:
def num4():
def tp(nums):
res = []
for i in range(len(nums)):
for j in range(i+1,len(nums)):
res.append(nums[i] + nums[j])
return res
nums = [ 1, 5, 7, -2 ]
print(tp(nums)
我仔细研究了它所做的,标记了它,并期望它能产生这样的结果:
def tp(nums):
res =
我的代码在python3中使用python3中的递归调用,它运行得非常好。现在的问题是,这是从在中引入的,我需要它在中工作。我读了几篇文章,但没有一篇足够详细或简单。
很少提及条款:
其他人也不多。
我重新创建了一个小示例代码(它接受一个多级列表并返回一个扁平列表),与我的需求相比,这是一个非常简约的。
#python 3
def foo(obj):
for ele in obj:
if isinstance(ele, list):
yield from foo(ele)
else:
y
在我的程序中有两行看起来相当简单,但却让我有些头疼。
就是这里
costs = sum([map(int, f.readline().strip().split(' ')) for i in range(8)], [])
awards = sum([map(int, f.readline().strip().split(' ')) for i in range(8)], [])
它给出了错误:TypeError:只能连接列表(而不是"map")来列出
在我看来,这与python 2到python 3版本有关,但我无法理解!
我被困在这几个小时,找