相关疑难解决方法(0)

更多pythonic的方式来写这个?

我在这里有这个代码:

import re
def get_attr(str, attr):
    m = re.search(attr + r'=(\w+)', str)
    return None if not m else m.group(1)

str = 'type=greeting hello=world'

print get_attr(str, 'type')   # greeting    
print get_attr(str, 'hello')  # world
print get_attr(str, 'attr')   # None
Run Code Online (Sandbox Code Playgroud)

哪个有效,但我不是特别喜欢这一行:

return None if not m else m.group(1)
Run Code Online (Sandbox Code Playgroud)

在我看来,如果我们可以使用三元运算符,这看起来会更清晰:

return (m ? m.group(1) : None)
Run Code Online (Sandbox Code Playgroud)

但那当然不存在.你有什么建议?

python

5
推荐指数
1
解决办法
1013
查看次数

在那儿 '?' Python中的控制流程?

可能重复:
Python三元运算符

控制流操作符是否类似于'?' python中的C/C++?

如果有一大堆代码与此类似:

return n <= 1 ? n : fibo(n-1) + fibo(n-2)
Run Code Online (Sandbox Code Playgroud)

会出现这样的错误:

File "fibonacci.py", line 2
    return n <= 1 ? n : fibo(n-1) + fibo(n-2)
                  ^
SyntaxError: invalid syntax
Run Code Online (Sandbox Code Playgroud)

python ternary-operator

5
推荐指数
2
解决办法
1533
查看次数

哪种Python三元操作更好,为什么?

我一直在读这个地方,包括Python有三元条件运算符吗?.这应该是

result = a if a > b else b
Run Code Online (Sandbox Code Playgroud)

是比更好的代码

result =  a > b and a or b
Run Code Online (Sandbox Code Playgroud)

但没有人能解释为什么.有人请详细说明吗?

如果仅仅是可读性,那么这只是一个偏好问题:有些人会喜欢这个,有些人会喜欢对方.所以我的问题是:从一种方式到另一种方式是否有一些真正的技术优势.

python

5
推荐指数
1
解决办法
980
查看次数

替换列表内元组中的字符串

我目前有以下列表:

data = [('b','..','o','b'),('t','s','..','t')]
Run Code Online (Sandbox Code Playgroud)

我试图找出一种方法将“..”字符串的所有实例替换为另一个字符串。在我的例子中,字符串是“”。

我尝试使用以下方法使用内置函数,但没有成功。

newData = list(map(lambda i: str.replace(i, ".."," "), data))
Run Code Online (Sandbox Code Playgroud)

有人能指出我正确的方向吗?我想要的输出如下:

newData = [('b',' ','o','b'),('t','s',' ','t')]
Run Code Online (Sandbox Code Playgroud)

python arrays replace tuples list

5
推荐指数
1
解决办法
1万
查看次数

如何在python中将输入数字转换为百分比

print ("How much does your meal cost")

meal = 0
tip = 0
tax = 0.0675

action = input( "Type amount of meal ")

if action.isdigit():
    meal = (action)
    print (meal)

tips = input(" type the perentage of tip you want to give ")


if tips.isdigit():
    tip = tips 
    print(tip)
Run Code Online (Sandbox Code Playgroud)

我写过这个,但我不知道怎么弄

print(tip)
Run Code Online (Sandbox Code Playgroud)

当有人输入一个数字时,它是一个百分比.

python python-3.x

5
推荐指数
2
解决办法
2万
查看次数

在列表列表中反转浮点数

我有一个Markov转换表的输出,这是一个包含59个浮点数的59个列表的列表.我想反转每个非0浮点数,然后规范化输出,以便我再次列出一个概率列表,加起来为1.

我已经阅读了关于列表理解的教科书,这似乎是相关的,但我不能为我的生活理解如何实现它.

列表清单是 m

for i in range(59):
    [1/item for item in m[i] if item > 0.]
    i += 1
Run Code Online (Sandbox Code Playgroud)

这会运行,但不会改变m.我item在这段代码中使用错了吗?我应该使用其他参考吗?

python numpy nested-lists

5
推荐指数
3
解决办法
455
查看次数

基于模/余数计算填充的简单方法

如果我有一个长度为 L=77 的字符串,我想将其填充到 N=10 的倍数的长度。我感兴趣的是计算所需的填充量。这可以很容易地用 来完成N - (L % N),除了L % N为零的情况。

我现在一直在使用以下内容:

pad = (N - (L % N)) % N
Run Code Online (Sandbox Code Playgroud)

这看起来不是特别清晰,所以有时我使用

pad = N - (L % N)
if pad == N:
    pad = 0
Run Code Online (Sandbox Code Playgroud)

使用三行代码来完成如此简单的事情似乎有些过分了。

或者,我可以找到kfor which k * N >= L,但使用math.ceil似乎也有点矫枉过正。

我缺少更好的选择吗?也许某个地方有一个简单的功能?

python padding modulo

5
推荐指数
1
解决办法
1842
查看次数

在 while 循环中只执行一行代码一次

如何让特定的代码行在 while 循环中只执行一次?

我希望这条线: "Hello %s, please enter your guess: " %p1"只运行一次,而不是每次玩家猜错时运行。

是否有我可以使用的命令或功能,或者我是否必须以不同的方式构建整个游戏?这种形式的程序是否有简单的修复?

import random

number = random.randint(1,9)

p1 = input("Please enter your name: ")

count = 0

guess = 0

while guess != number and guess != "exit":

    guess = input("Hello %s, please enter your guess: " % p1)

    if guess == "exit":
        break

    guess = int(guess)
    count += 1

    if guess == number:
        print("Correct! It Took you only", count, "tries. :)")
        break
    elif guess > number:
        print("Too …
Run Code Online (Sandbox Code Playgroud)

python loops while-loop

5
推荐指数
1
解决办法
1万
查看次数

使用cmp在Python中排序()

我正在尝试对列表进行排序,将所有0移到列表的末尾.示例:[0,1,0,2,3,0,4] - > [1,2,3,4,0,0,0]

我看到有人在一行编码

list.sort(cmp=lambda a,b:-1 if b==0 else 0)
Run Code Online (Sandbox Code Playgroud)

但我不明白括号内的意思.

有谁能告诉我?谢谢.

python sorting lambda cmp

4
推荐指数
1
解决办法
2万
查看次数

为什么我得到"超出最大递归深度"

我只是看到python的if-else语句的替代构造,(0, 1)[ x > 5]并希望尝试递归,但由于某种原因,它不起作用.只是忘了它是unpythonic的片刻.

这是一个原始代码,我试图替换为替代:

def f(n):
    return 1 if n == 1 else n * f(n - 1)
Run Code Online (Sandbox Code Playgroud)

替代方案,它会产生递归问题:

def f(n):
    return (n * f(n - 1), 1)[n == 1]
Run Code Online (Sandbox Code Playgroud)

替代代码有什么问题?

python recursion if-statement

4
推荐指数
1
解决办法
94
查看次数