例如,我有一个可变大小的列表
[1, 2, 3, 4]
Run Code Online (Sandbox Code Playgroud)
我想尽可能地将这个列表分成两部分:
([], [1, 2, 3, 4])
([1], [2, 3, 4])
([2], [1, 3, 4])
([3], [1, 2, 4])
([4], [1, 2, 3])
([1, 2], [3, 4])
([1, 3], [2, 4])
([1, 4], [2, 3])
([2, 3], [1, 4])
([2, 4], [1, 3])
([3, 4], [1, 2])
([1, 2, 3], [4])
([1, 2, 4], [3])
([1, 3, 4], [2])
([2, 3, 4], [1])
([1, 2, 3, 4], [])
Run Code Online (Sandbox Code Playgroud)
我很确定这不是一个未知的问题,可能有一个算法,但我找不到一个.此外,这不应该使用任何外部库,而是使用大多数语言中的简单语言功能(循环,条件,方法/函数,变量......).
我在Python中编写了一个hackish解决方案:
def get_all(objects):
for i in range(1, …Run Code Online (Sandbox Code Playgroud) 我正在开发一个Python程序来检测记录列表中的城市名称.我到目前为止开发的代码如下:
aCities = ['MELBOURNE', 'SYDNEY', 'PERTH', 'DUBAI', 'LONDON']
cxTrx = db.cursor()
cxTrx.execute( 'SELECT desc FROM AccountingRecords' )
for row in cxTrx.fetchall() :
if any( city in row[0] for city in aCities ) :
#print the name of the city that fired the any() function
else :
# no city name found in the accounting record
Run Code Online (Sandbox Code Playgroud)
该代码可以很好地检测在会计记录中找到aCities列表中的城市,但是当any()函数返回True或False时我很难知道哪个城市(墨尔本,悉尼,珀斯,迪拜或伦敦) )触发退出.
我已经尝试过aCities.index和队列但到目前为止没有成功.
在python中导致异常之后重复某些事情的最优雅方法是什么?
我有这样的东西[伪代码作为例子]:
try:
do_some_database_stuff()
except DatabaseTimeoutException:
reconnect_to_database()
do_some_database_stuff() # just do it again
Run Code Online (Sandbox Code Playgroud)
但想象一下,如果我没有一个很好的功能,而是很多代码.重复的代码不是很好.
所以我认为这稍微好一些:
while True:
try:
do_some_database_stuff()
break
except DatabaseTimeoutException:
reconnect_to_database()
Run Code Online (Sandbox Code Playgroud)
如果异常确实解决了问题,那就足够了.如果不是,我需要一个计数器来防止无限循环:
i = 0
while i < 5:
try:
do_some_database_stuff()
break
except DatabaseTimeoutException:
reconnect_to_database()
i += 1
Run Code Online (Sandbox Code Playgroud)
但后来我真的不知道它是否有效,所以它也是:
while i <= 5:
try:
do_some_database_stuff()
break
except DatabaseTimeoutException:
if i != 5:
reconnect_to_database()
else:
raise DatabaseTimeoutException
i += 1
Run Code Online (Sandbox Code Playgroud)
你可以看到它开始变得非常混乱.
表达这种逻辑的最优雅方式是什么?
我有两个清单:
list1 = [ {'sth': 13, 'important_key1': 'AA', 'important_key2': '3'}, {'oh!': 14, 'important_key1': 'FF', 'important_key2': '4'}, {'sth_else': 'abc', 'important_key1': 'ZZ', 'important_key2': '5'}]
list2 = [ {'why-not': 'tAk', 'important_key1': 'GG', 'important_key2': '4'}, {'hmmm': 'no', 'important_key1': 'AA', 'important_key2': '3'}]
Run Code Online (Sandbox Code Playgroud)
我想返回一个仅包含来自list1的对象的列表,但如果相同important_key1并且important_key2在list2中的任何元素中,我想从list2中获取此元素.
所以输出应该是:
[ {'hmmm': 'no', 'important_key1': 'AA', 'important_key2': '3'}, {'oh!': 14, 'important_key1': 'FF', 'important_key2': '4'}, {'sth_else': 'abc', 'important_key1': 'ZZ', 'important_key2': '5'}]
Run Code Online (Sandbox Code Playgroud)
通过两个或三个循环来做它并不复杂,但我想知道是否有一种简单的方法可以使用列表推导或类似的东西.
这是"正常"的方式:
list1 = [ {'sth': 13, 'important_key1': 'AA', 'important_key2': '3'}, {'oh!': 14, 'important_key1': 'FF', 'important_key2': '4'}]
list2 …Run Code Online (Sandbox Code Playgroud) 似乎下面的两个代码都打印相同,那么python中“for”循环之后的“else”块有什么需要。
代码 1:
for i in range(10):
print i
else:
print "after for loop"
Run Code Online (Sandbox Code Playgroud)
代码 2:
for i in range(10):
print i
print "after for loop"
Run Code Online (Sandbox Code Playgroud)
提前致谢。
else如果if条件为假,我如何运行整个循环然后转到语句?
输出是:
没有
没有
是
但是如果所有值都不相等,我只希望它跳转到else语句!
test_1 = (255, 200, 100)
test_2 = (200, 200, 100)
test_3 = (500, 50, 200)
dict = {"test_1":test_1,
"test_2":test_2,
"test_3":test_3}
for item in dict:
if dict[item] == (500, 50, 200):
print('Yes')
else:
print('No')
Run Code Online (Sandbox Code Playgroud)
所以基本上输出应该说,因为其中一个值是真的.
是
为什么PyCharm彰显boolean附近的变量return用 Local variable "boolean" might be referenced before assignment?
此代码检查数字是否为素数:
import random
import math
import time
def prime_t(x):
print x
if x < 2:
return False
if x == 2:
return True
if x == 3:
return True
for i in range(2, int(math.sqrt(x))+1):
if x % i == 0:
boolean = False
break
else:
boolean = True
return boolean
random.seed()
how_much = input()
start = time.time()
for i in range(0, how_much):
print(prime_t(random.randint(0, 1000)))
print time.time()-start …Run Code Online (Sandbox Code Playgroud) 此代码运行良好,并生成所需的素数列表.但else打印我们的素数的块是不合适的,但无论如何它都可以工作,有人可以解释一下吗?
for num in range(0, 100 + 1):
# prime numbers are greater than 1
if num > 1:
for i in range(2, num):
if (num % i) == 0:
break
else:
print(num)
Run Code Online (Sandbox Code Playgroud)
我对 python 比较陌生,一直在研究一个问题,以找到两个输入之间的质数。我有一个有效的解决方案(也通过在线搜索有所帮助),但我不确定为什么else下面显示的语句不应该与语句位于相同的选项卡设置中if。但是,如果是这样,它就不能正常工作。任何人都可以为我澄清这一点吗?
我的代码在这里:
n1 = int(input("Enter the lower number: "))
n2 = int(input("Enter the higher number: "))
for num in range(n1, n2 + 1):
if num > 1:
for i in range(2, num):
if num % i == 0:
break
else:
print(num)
Run Code Online (Sandbox Code Playgroud) 我可以运行下面的python脚本而不会出错.
for n in range(3):
print n
else:
print "done"
Run Code Online (Sandbox Code Playgroud)
但我对其他没有匹配的问题感到困惑.
它没有任何意义.
有人可以解释为什么这有效吗?