小编Sha*_*ger的帖子

python3:带有"+"操作数的字典的sum(union)引发异常

我想避免使用update()方法,并且我读到可以使用"+"操作数将两个字典合并到第三个字典中,但在我的shell中发生的是:

>>> {'a':1, 'b':2}.items() + {'x':98, 'y':99}.items()
Traceback (most recent call last):
  File "<pyshell#84>", line 1, in <module>
    {'a':1, 'b':2}.items() + {'x':98, 'y':99}.items()
TypeError: unsupported operand type(s) for +: 'dict_items' and 'dict_items'
>>> {'a':1, 'b':2} + {'x':98, 'y':99}
Traceback (most recent call last):
  File "<pyshell#85>", line 1, in <module>
    {'a':1, 'b':2} + {'x':98, 'y':99}
TypeError: unsupported operand type(s) for +: 'dict' and 'dict'
Run Code Online (Sandbox Code Playgroud)

我怎样才能让它发挥作用?

python dictionary python-3.x dictview

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

Python 检查 4 位数字

import string
import math
def fourDigit():
    num = raw_input("Enter a 4 digit number: ")
    if (len(num) == 4 and string.digits == True):
        some = int(int(val[1]) + int(val[3]))
        print("The sum of the 1st and second term is: ")
    else:
       print("Error!")
Run Code Online (Sandbox Code Playgroud)

所以在这个函数中我指定数字必须是4位数字并且字符串必须有数字。即使我输入 1234 它也会打印错误。

python

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

在pickle中保存整数并调用它们

所以这是我的代码,我想将值'test'保存到文件中,以便在重新打开程序时可以调用它.

import pickle
test = 0

def Save():
     with open('objs.pickle', 'wb') as f:
         pickle.dump(test, f)

def Load():
    with open('objs.pickle', 'rb') as f:
        test = pickle.load(f)
Run Code Online (Sandbox Code Playgroud)

这段代码的问题在于,当我重新打开程序然后运行然后输入Load()时,它表示'test'仍然等于0.(很可能忽略了一些)

所以我的问题是,我怎么能解决用斜体字发出的问题?

python

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

检查空字符串时,"== False"和"is not"之间是否有区别?

我已经在stackoverflow的其他地方读过,在Python中检查空字符串的最优雅方法是(例如,假设它是一个被调用的字符串response):

if not response:
    # do some stuff 
Run Code Online (Sandbox Code Playgroud)

原因是字符串可以计算为布尔对象.

所以我的问题是,下面的代码是否说同样的事情?

if response == False:
    # do some stuff
Run Code Online (Sandbox Code Playgroud)

python boolean-expression

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

Pythonic方法解析带有后缀的字符串中的数字

使用Python 3.

我有一个字符串,例如128kb/s,5mb/s或者作为简单的东西42!.数字字符及其后缀之间没有空格,所以我不能直接调用int(text).

我只是想捕捉的值128,542为整数.

目前,我刚刚编写了一个辅助函数,它将所有数字累积到一个字符串中,并打破第一个非数字字符.

def read_int_from_string(text):
    s = ""
    val = 0
    for c in text:
        if (c >= '0') and (c <= '9'):
            s += c
        else:
            break
    if s:
        val = int(s)
    return val
Run Code Online (Sandbox Code Playgroud)

以上工作正常,但有更多的pythonic方式来做到这一点

python string-parsing python-3.x

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

大写功能的较短代码

我在这里解决了这个问题https://www.hackerrank.com/challenges/capitalize

描述:给你一个字符串.你的任务是利用它的每个词.总之,只有第一个字符大写.大写时的示例12abc仍然是12abc - 因为这个'title'不适用于像'1 w 2 r 3g'这样的字符串.我需要检查数字和小写字母的组合.这是我的代码:

def capitalize(string):
    result = list (string.title())
    for index in range (len (string)-1):
      if string[index].isdigit () and string[index+1].islower ():
        result[index+1] = result[index+1].lower()
    result = ''.join([char for char in result])
    return (result)
Run Code Online (Sandbox Code Playgroud)

但是这段代码太麻烦了.有人可以帮助更优雅的pythonic决定吗?谢谢!

python python-3.x

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

Python:为方法调用添加可选参数的更优雅方式

这可能看起来微不足道,但这是我经常遇到的一个条件,并希望找到一种更优雅的方式来编写这段代码.该方法虽然与问题不是非常相关,但它采用文本值和可选的is_checked值来创建单选按钮(使用dominate).在这种情况下,我不能将'checked'设置为None,或者设置为false - 它必须存在或不存在.看起来我不应该两次写'输入'行,只是为了可选地添加一个参数.

def _get_radio_button(text: str, is_checked=False):

    with label(text, cls="radio-inline") as lbl:
        if is_checked:
            input(text, type="radio", name="optradio", checked='checked')
        else:
            input(text, type="radio", name="optradio")

    return lbl
Run Code Online (Sandbox Code Playgroud)

这将是我的第二种方法,但它是相同的代码行,而且可读性较差 - 尽管可能更多一些干.

a = dict(type='radio', name='optradio')
if is_checked: 
    a['checked']='checked'
with label(text, cls="radio-inline") as lbl:
    input(text, **a)
Run Code Online (Sandbox Code Playgroud)

问题:如何在不牺牲可读性的情况下以最少的行处理此代码案例?

python optional-parameters keyword-argument python-3.x

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

在ipython 5.0+中按Ctrl-C时在屏幕上留下不完整的行

在较旧的(我认为是5.0之前的版本)IPython中,如果我正在处理行/块,突然发现我需要研究其他事情来完成它,我的方法是按Ctrl-C,这留下了不完整的行/ block在屏幕上,但未执行,并给了我新的提示。也就是说,我会看到类似以下内容的内容:

In [1]: def foo():
   ...:     stuff^C  # <-- Just realized I needed to check something on stuff usage

In [2]:    # <-- cursor goes to new line, but old stuff still on terminal
Run Code Online (Sandbox Code Playgroud)

在较新的IPython中(这似乎已经从切换readlineprompt_toolkit的“CLI支持框架”),Ctrl-C键的不同的行为; 现在,它没有给我换行符,而是重置了当前行,丢弃了我键入的所有内容,并将光标返回到该行的开头。

# Before:
In [1]: def foo():
   ...:     stuff

# After Ctrl-C:
In [1]:   # Hey, where'd everything go?
Run Code Online (Sandbox Code Playgroud)

这非常烦人,因为在完成任何辅助任务后,我再也无法看到或复制/粘贴正在处理的代码来恢复工作,因此需要重新提示。

我的问题是:有什么方法可以还原旧的IPython行为,其中Ctrl-C执行以下操作:

  1. 至今未执行键入的行/块
  2. 留在屏幕上
  3. 能够选择(在配置时就可以)是否添加到历史记录中(这是个人喜好;您要在历史记录中使用半形式的内容,还是仅在终端上进行复制/粘贴?)
  4. 在到目前为止输入的文字下方为我提供了新的提示

我到处搜索,发现最多的是一个错误报告注释,该注释提到此新行为是“ ...是对IPython早期版本的更改,但这是有意的。”

在IPython或prompt_toolkit文档中,我找不到任何有关修改行为的文档;我已经找到了许多安装了这些处理程序的位置,但是尝试用猴子补丁来更改当前行为却失败了(坦率地说,用猴子补丁来记录未记录的代码意味着我冒着破坏每次升级的风险,所以我想找到一些对此的半支持修复;否则,可以接受hacky的猴子修补程序)。

python keyboard-shortcuts ipython keyboardinterrupt prompt-toolkit

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

如何在O(1)时间内将列表中的最后一项移到前面?

我的代码看起来像这样,其中heaplist:

 heap[0] = heap.pop()
Run Code Online (Sandbox Code Playgroud)

问题是弹出唯一的项目时它不起作用.根据python wiki,弹出最后一个元素是O(1).(我也想删除最后一个元素)

到目前为止,我想出了什么:

last_element = heap.pop()  # I don't want to catch potential IndexError here
try:
    heap[0] = last_element
except IndexError:
    heap.append(last_element)
Run Code Online (Sandbox Code Playgroud)

这要长得多

或这个

if len(heap) != 1:
    heap[0] = heap.pop()
Run Code Online (Sandbox Code Playgroud)

哪个应该慢一些.

是否有更多的pythonic方式来做到这一点?内部python可能甚至没有调整数组的大小.

更新:我需要O(1)访问给定indeces的元素(因此它不能是链表).

python heap python-3.x

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

从列表中过滤字符串

我正在尝试从列表中过滤字符串。任务是:

创建一个函数,该函数接受一个非负数和字符串列表,并返回一个没有字符串的新列表。

这是我的代码:

def filter_list(lst):
    intlist = []
    while len(lst) > 0:
        if isinstance(lst[0],int):
            if lst[0] >= 0
                intlist.append(lst[0])
                lst.remove(lst[0])
            else:
                lst.remove(lst[0])
        if isinstance(lst[0],str):
            lst.remove(lst[0])
    return (intlist)
Run Code Online (Sandbox Code Playgroud)

它给了我一个错误,似乎我陷入了无限的 while 循环中,尽管我不明白是怎么回事,因为我逐渐从列表中删除了项目,当列表为空时循环结束。

python filter python-3.x

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