在Python下,当您想要获取列表中第一次出现的子字符串或字符的索引时,您可以使用以下内容:
s.find("f")
Run Code Online (Sandbox Code Playgroud)
但是,我想找到字符串中第一个不匹配的字符的索引.目前,我正在使用以下内容:
iNum = 0
for i, c in enumerate(line):
if(c != mark):
iNum = i
break
Run Code Online (Sandbox Code Playgroud)
有没有更有效的方法来做到这一点,比如我不知道的内置函数?
我有一个程序涉及多次计算一个定积分,并一直在努力寻找一种方法来快速完成.我需要解决的积分有以下形式:
我必须为r的许多不同值求解这个积分,这既影响积分的极限,也影响积分(通过函数g).因此,我没有找到一种方法来对问题进行矢量化,而必须依赖于循环.这显着减慢了问题,因为我需要在每个循环中进行函数调用.下面是使用循环(使用组合数据和函数)的一种方法:
import numpy as np
f = lambda x: x**2
g = lambda x: np.log(x)
b=1000
r = np.arange(10,500,10)
a = 1.1*r+r**-1
def loop1(r,a):
integration_range=[np.linspace(a[i],b,1000) for i in range(len(a))]
out=np.zeros(len(r))
i=0
while i<len(r):
out[i]=np.trapz(f(integration_range[i])*a_pdf(integration_range[i]-r[i]),integration_range[i])
i=i+1
return out
Run Code Online (Sandbox Code Playgroud)
这大约需要17.7毫秒,这对我目前的需求来说太慢了.我不太关心积分是否超精确; 我很满意一个解决方案,它给出的近似值在真实值的1%以内.任何帮助将不胜感激!
我在这里阅读官方文件
https://docs.python.org/2/library/datetime.html#strftime-strptime-behavior
它声明我可以使用
小时,分钟和秒的%H和%M和%S
我这样做:
datetime.date.today().strftime("%Y-%m-%d%H:%M:%S")
而我总是得到
'2016-07-18 00:00:00'
价值在哪里?
以下是我的问题
读取二进制文件的前10个字节(稍后操作) -
infile = open('infile.jpg', 'rb')
outfile = open('outfile.jpg', 'wb')
x = infile.read(10)
for i in x:
print(i, end=', ')
print(x)
outfile.write(bytes(x, "UTF-8"))
Run Code Online (Sandbox Code Playgroud)
第一份印刷声明给出了 -
255, 216, 255, 224, 0, 16, 74, 70, 73, 70,
Run Code Online (Sandbox Code Playgroud)
第二份印刷声明给出 -
b'\xff\xd8\xff\xe0\x00\x10JFIF'
Run Code Online (Sandbox Code Playgroud)
x中值的十六进制解释.
outfile.write(bytes(x, "UTF-8"))
Run Code Online (Sandbox Code Playgroud)
回报 -
TypeError: encoding or errors without a string argument
Run Code Online (Sandbox Code Playgroud)
那么x必须不是普通字符串,而是字节字符串,它仍然是可迭代的?
如果我想将x的内容写入outfile.jpg,那么我就去 -
outfile.write(x)
Run Code Online (Sandbox Code Playgroud)
现在我尝试取每个x [i]并对每个执行一些操作(下面显示为1的骨骼简单乘积),将值赋给y并将y写入outfile.jpg,使其与infile.jpg相同.所以我尝试 -
infile = open('infile.jpg', 'rb')
outfile = open('outfile.jpg', 'wb')
x = infile.read(10)
yi = len(x)
y = [0 for i in range(yi)] …
Run Code Online (Sandbox Code Playgroud) 我有一些python多处理代码,父进程启动一堆子工作进程,然后在一段时间后终止它们:
from multiprocessing import Process
nWorkers = 10
curWorkers = []
for iw in range(nWorkers):
pq = Process(target=worker, args=(worker's_args_here))
pq.start()
curWorkers.append(pq)
# Do work here...
for pw in curWorkers:
pw.terminate()
Run Code Online (Sandbox Code Playgroud)
但是,子进程在终止后很长时间都显示为已停止运行.他们是僵尸进程吗?更重要的是,我应该如何终止它们以便它们真正消失?
File "/Users/SalamonCreamcheese/Documents/4.py", line 31, in <module>
testFindRoot()
File "/Users/SalamonCreamcheese/Documents/4.py", line 29, in testFindRoot
print " ", result**power, " ~= ", x
TypeError: unsupported operand type(s) for ** or pow(): 'tuple' and 'int'
Run Code Online (Sandbox Code Playgroud)
任何帮助都将受到高度赞赏,我不明白为什么它说结果**的力量是类型的,我是假设意义字符串,为什么这是一个错误.提前感谢您的任何反馈.
def findRoot(x, power, epsilon):
"""Assumes x and epsilon int or float,power an int,
epsilon > 0 and power >= 1
Returns float y such that y**power is within epsilon of x
If such a float does not exist, returns None"""
if x < 0 and power % …
Run Code Online (Sandbox Code Playgroud) 我目前正在尝试理解排序算法,并一直在寻找伪代码并将其转换为python(使用python 3.6,IDE是Spyder 3.1.2).我写了一个简单的冒泡排序:
def BubbleSort(array_to_sort):
n = len(array_to_sort) - 1
swapped = True
while (swapped):
swapped = False
for i in range(n):
if array_to_sort[i] > array_to_sort[i+1]:
array_to_sort[i+1], array_to_sort[i] = array_to_sort[i], array_to_sort[i+1]
swapped = True
return array_to_sort
Run Code Online (Sandbox Code Playgroud)
一个简单的选择排序:
def SelectionSort(array_to_sort):
n = len(array_to_sort)
for i in range(n):
minPos = i
for j in range(i+1, n):
if array_to_sort[j] < array_to_sort[minPos]:
minPos=j
if minPos != i:
array_to_sort[i], array_to_sort[minPos] = array_to_sort[minPos], array_to_sort[i]
return array_to_sort
Run Code Online (Sandbox Code Playgroud)
我试图像他们这样计时:
def main():
array = RandomNumberArray()
a = timeit.Timer(functools.partial(BubbleSort, array)) …
Run Code Online (Sandbox Code Playgroud) 我在这里编写的筛选算法遇到了问题。我已经尝试修复它总共大约10个小时了。我在这里四处寻找类似的问题,但似乎找不到任何遇到此问题的人。我对 python 比较陌生,在阅读了大量生成器文档后,我设法编写了有效的代码。然而,我仍然不知道为什么我的第一次尝试失败了。
我所想到的是,在每个连续的筛分步骤中,似乎 gen1 实际上并没有被清空。因此,我尝试交替使用名称 gen1 和 gen2,并删除每个名称以避免此问题。那也没用。
我真的很感激对此的一些见解,以及任何改进我现在所拥有的建议。
这是失败的代码:
def primes(n):
"yields primes up to n. For use with large n"
q = 0
yield 2
gen1 = (x for x in range(3,n,2))
while q*q < n:
q = next(gen1)
gen1 = (x for x in gen1 if x%q != 0)
yield q
else:
while 1:
try:
yield next(gen1)
except:
StopIteration
break
Run Code Online (Sandbox Code Playgroud)
这是我当前的代码:
import math
global gen1
global gen
def gen1(x):
for i in range(3,x,2):
yield i
def …
Run Code Online (Sandbox Code Playgroud) python recursion generator generator-expression sieve-of-eratosthenes