小编Ev.*_*nis的帖子

从元组生成一个字符串

我正在寻找一种漂亮,高效和pythonic的方式来做这样的事情:

('zone1', 'pcomp110007')

对此:

'ZONE 1, PCOMP 110007'

regex如果可能的话,不使用(除非它确实产生了很大的不同......).因此,将每个字母转换为大写字母,在字母和数字之间放置一个空格,并用逗号连接.

我写的是以下内容:

tags = ('zone1', 'pcomp110007')


def sep(astr):
    chars = ''.join([x.upper() for x in astr if x.isalpha()])
    nums = ''.join([x for x in astr if x.isnumeric()])
    return chars + ' ' + nums

print(', '.join(map(sep, tags)))
Run Code Online (Sandbox Code Playgroud)

哪个确实产生了预期的结果,但看起来有点太多了.

元组的长度可能不同,但数字总是在每个字符串的末尾.

python python-3.x

9
推荐指数
2
解决办法
300
查看次数

python何时引发FloatingPointError?

Python文档说浮点计算失败时会引发FloatingPointError.但这里的"浮动计算"究竟是什么意思呢?我尝试使用浮点数进行添加,乘法和除法,但从未设法提出此特定错误.相反,我有一个TypeError:

10/'a'
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: unsupported operand type(s) for /: 'int' and 'str'
Run Code Online (Sandbox Code Playgroud)

有人可以帮我理解什么时候FloatingPointError在python中引发?

python

9
推荐指数
2
解决办法
1357
查看次数

比较startswith().vs的速度.在()

我的印象是startswith 必须比必须做更多检查in的简单原因更快(允许在字符串中的任何地方查找单词).但我怀疑,所以我决定.时间的代码如下所示,您可能会注意到我没有做太多时间; 代码很简单.intimeit

import timeit

setup1='''
def in_test(sent, word):
    if word in sent:
        return True
    else:
        return False
'''

setup2='''
def startswith_test(sent, word):
    if sent.startswith(word):
        return True
    else:
        return False
'''

print(timeit.timeit('in_test("this is a standard sentence", "this")', setup=setup1))
print(timeit.timeit('startswith_test("this is a standard sentence", "this")', setup=setup2))
Run Code Online (Sandbox Code Playgroud)

结果:

>> in:         0.11912814951705597
>> startswith: 0.22812353561129417
Run Code Online (Sandbox Code Playgroud)

所以startswith慢了两倍!我发现这个行为非常令人费解,因为我上面已经说过了.我对两个人的计时做错了还是in确实更快?如果是这样,为什么?

请注意,即使它们都返回,结果也非常相似False(在这种情况下,in如果它之前只是短路,则必须实际遍历整个传感器):

print(timeit.timeit('in_test("another standard sentence, would be that", "this")', …
Run Code Online (Sandbox Code Playgroud)

python performance time python-3.x

9
推荐指数
2
解决办法
1574
查看次数

根据另一个词典中的值过滤dict列表

我有一个字典列表list_of_dict,一组键set_of_keys和另一个字典dict_to_compare.

如果三个可能键中任意两个键的值与来自的值匹配,我需要过滤dicts列表dict_to_compare.

输入:

set_of_keys = {'val1', 'val2', 'val3'}

dict_to_compare = {'k1': 'val1', 'k2': 'val2','k3':'val6'}

list_of_dict = [
        {'k1': 'val1', 'k2': 'val2', 'k3':'val3'},
        {'k1': 'val4', 'k2': 'val5', 'k3':'val6'},
        {'k1': 'val7', 'k2': 'val8', 'k3':'val9'}
]
Run Code Online (Sandbox Code Playgroud)

输出:

 out = [{'k1': 'val1', 'k2': 'val2', 'k3': 'val3'}] #First element from list
Run Code Online (Sandbox Code Playgroud)
  • 所有元素list_of_dicts都具有相同的键.
  • dict_to_compare也有与元素相同的键list_of_dicts.
  • list_of_dicts可以匹配多个元素.
  • 针对两个键的任意组合的值应该匹配而不是全部三个.

我尝试通过明确指定一堆if elif条件来做到这一点.但问题是关键设置确实很大.有没有更好的方法来解决这个问题?

谢谢

python python-3.x

9
推荐指数
2
解决办法
1078
查看次数

fractions.Fraction()返回不同的nom.,denom.解析float或其字符串表示时对

我知道浮点数学的本质,但我仍然发现以下令人惊讶的:

from fractions import Fraction

print(Fraction(0.2))       # -> 3602879701896397/18014398509481984
print(Fraction(str(0.2)))  # -> 1/5

print(Fraction(0.2)==Fraction(str(0.2)))  # returns False
print(0.2 == float(str(0.2)))             # but this returns True!
Run Code Online (Sandbox Code Playgroud)

文档中我找不到任何可以解释的东西.它确实说明:

...此外,Fraction构造函数也接受任何表示有限值且被float构造函数接受的字符串...

但对我来说,这意味着一种类似的行为float(),我只是看不到如上所示.

这有什么解释吗?


重要的是要注意,上面显示的行为并不特定于值(0.2),而是一般的; 我试过的一切都表现得一样.


有趣的是:

from fractions import Fraction


for x in range(1, 257):
    if Fraction(str(1/x))==Fraction(1/x):
        print(x)
Run Code Online (Sandbox Code Playgroud)

仅打印小于所选上限的2:

1
2
4
8
16
32
64
128
256
Run Code Online (Sandbox Code Playgroud)

python floating-point fractions

9
推荐指数
1
解决办法
327
查看次数

Jaden Casing String:如何返回大写单词的句子字符串?

我想创建一个接受短文本并以所谓的Jaden Case模式返回的函数,其中每个单词的首字母均为大写(我可以找到的最佳参考)。

例如"Hi, I'm twenty years old"应该返回"Hi I'm Twenty Years Old"

我已经尝试过自己解决此问题,但是撇号后的字母变成大写字母,而实际上不应该。

我的尝试:

def toJadenCase(string):
    for letter in string:
        if letter == "\'" :
            letter[+1].lowercase()
        else:
            return string.title()
    return string
Run Code Online (Sandbox Code Playgroud)

python string python-3.x

7
推荐指数
1
解决办法
123
查看次数

任何()懒惰地评估?

我正在编写一个脚本,我必须根据许多条件测试数字.如果满足任何条件,我想返回True,我想以最快的方式做到这一点.

我的第一个想法是使用any()而不是嵌套if语句或多个or链接我的条件.因为我会满意,如果任何条件是True我真的可以从any()懒惰和尽快返回真正受益.

基于以下事实:以下打印立即发生而不是在10(= 0 + 1 + 2 + 3 + 4)秒之后,我认为是.是这样的,还是我错了?

import time

def some(sec):
    time.sleep(sec)
    return True

print(any(some(x) for x in range(5)))
Run Code Online (Sandbox Code Playgroud)

python

6
推荐指数
3
解决办法
1831
查看次数

等待流程成语

有没有更好的方法来写下面的习语:

while q.empty():      # wait until data arrives.
    time.sleep(5)  
while not q.empty():  # start consuming data until there is nothing left.
    data = q.get()    # this removes an item from the queue (works like `.pop()`)
    # do stuff with data
Run Code Online (Sandbox Code Playgroud)

qmultiprocessing.Queue()虽然我认为上面的结构也可以在其他地方找到,但是是一个相关的实例.

我觉得必须有一个更好的方法来做到这一点..

python queue multiprocessing python-3.x

6
推荐指数
1
解决办法
42
查看次数

Groupby列表中的多个列

我有一个列表,如下所示

[['H1','L', '1']
['H1','S', '1']
['H2','L', '1']
['H2','L', '1']]
Run Code Online (Sandbox Code Playgroud)

并希望基于column1和column2进行分组.python是否在列表中提供了我可以获得以下结果的任何内容

H1 L 1
H1 S 1
H2 L 2
Run Code Online (Sandbox Code Playgroud)

python

6
推荐指数
1
解决办法
529
查看次数

Python删除标签符号并保留关键字

我想删除主题标签符号 ( '#') 和分隔单词 ( '_') 的下划线

例子: "this tweet is example #key1_key2_key3"

我想要的结果: "this tweet is example key1 key2 key3"

我的代码使用字符串:

#Remove punctuation , # Hashtag Symbol 
translate_table = dict((ord(char), None) for char in string.punctuation)   
cleaned_combined_tweets.translate(translate_table)
Run Code Online (Sandbox Code Playgroud)

这给出了结果: "this tweet is example key1key2key3"

python data-cleaning

6
推荐指数
1
解决办法
6670
查看次数