相关疑难解决方法(0)

以一切可能的方式将列表拆分为两个子列表

例如,我有一个可变大小的列表

[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 java algorithm list sublist

13
推荐指数
1
解决办法
1845
查看次数

如何知道列表中的哪个元素触发了any()函数?

我正在开发一个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 python-2.7

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

如何在python中重复异常?

在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)

你可以看到它开始变得非常混乱.

表达这种逻辑的最优雅方式是什么?

  • 尝试一下
  • 如果失败则应用修复
  • 尝试n次,包括修复
  • 如果它继续失败给我一个错误,以防止无限循环

python python-2.7

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

Python3如何通过唯一键连接两个dicts列表

我有两个清单:

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 list-comprehension

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

Python中“for”循环后的“else”有什么用?

似乎下面的两个代码都打印相同,那么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)

提前致谢。

python syntax python-2.7

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

Python在转到else语句之前检查整个循环

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)

所以基本上输出应该说,因为其中一个值是真的.

python loops if-statement

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

可能会引用PyCharm警告局部变量

为什么PyCharm彰显boolean附近的变量returnLocal 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)

python variables function local pycharm

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

为什么这个'else`块工作但它与`if`情况不在同一级别?

此代码运行良好,并生成所需的素数列表.但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)

参考:programiz.com

python algorithm primes if-statement for-else

3
推荐指数
1
解决办法
102
查看次数

试图理解 Python 中的缩进

我对 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

3
推荐指数
1
解决办法
64
查看次数

Python for-else关系

我可以运行下面的python脚本而不会出错.

for n in range(3):
    print n
else:
    print "done"
Run Code Online (Sandbox Code Playgroud)

但我对其他没有匹配的问题感到困惑.
它没有任何意义.
有人可以解释为什么这有效吗?

python syntax

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