我想避免使用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)
我怎样才能让它发挥作用?
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 它也会打印错误。
所以这是我的代码,我想将值'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.(很可能忽略了一些)
所以我的问题是,我怎么能解决用斜体字发出的问题?
我已经在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 3.
我有一个字符串,例如128kb/s,5mb/s或者作为简单的东西42!.数字字符及其后缀之间没有空格,所以我不能直接调用int(text).
我只是想捕捉的值128,5和42为整数.
目前,我刚刚编写了一个辅助函数,它将所有数字累积到一个字符串中,并打破第一个非数字字符.
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方式来做到这一点?
我在这里解决了这个问题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决定吗?谢谢!
这可能看起来微不足道,但这是我经常遇到的一个条件,并希望找到一种更优雅的方式来编写这段代码.该方法虽然与问题不是非常相关,但它采用文本值和可选的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)
问题:如何在不牺牲可读性的情况下以最少的行处理此代码案例?
在较旧的(我认为是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中(这似乎已经从切换readline到prompt_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执行以下操作:
我到处搜索,发现最多的是一个错误报告注释,该注释提到此新行为是“ ...是对IPython早期版本的更改,但这是有意的。”
在IPython或prompt_toolkit文档中,我找不到任何有关修改行为的文档;我已经找到了许多安装了这些处理程序的位置,但是尝试用猴子补丁来更改当前行为却失败了(坦率地说,用猴子补丁来记录未记录的代码意味着我冒着破坏每次升级的风险,所以我想找到一些对此的半支持修复;否则,可以接受hacky的猴子修补程序)。
python keyboard-shortcuts ipython keyboardinterrupt prompt-toolkit
我的代码看起来像这样,其中heap是list:
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的元素(因此它不能是链表).
我正在尝试从列表中过滤字符串。任务是:
创建一个函数,该函数接受一个非负数和字符串列表,并返回一个没有字符串的新列表。
这是我的代码:
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 循环中,尽管我不明白是怎么回事,因为我逐渐从列表中删除了项目,当列表为空时循环结束。