相关疑难解决方法(0)

Python:根据条件拆分列表?

从美学角度和绩效角度来看,根据条件将项目列表拆分为多个列表的最佳方法是什么?相当于:

good = [x for x in mylist if x in goodvals]
bad  = [x for x in mylist if x not in goodvals]
Run Code Online (Sandbox Code Playgroud)

有没有更优雅的方式来做到这一点?

更新:这是实际的用例,以便更好地解释我正在尝试做的事情:

# files looks like: [ ('file1.jpg', 33L, '.jpg'), ('file2.avi', 999L, '.avi'), ... ]
IMAGE_TYPES = ('.jpg','.jpeg','.gif','.bmp','.png')
images = [f for f in files if f[2].lower() in IMAGE_TYPES]
anims  = [f for f in files if f[2].lower() not in IMAGE_TYPES]
Run Code Online (Sandbox Code Playgroud)

python

245
推荐指数
14
解决办法
14万
查看次数

将项目分组到存储桶的简单方法

我经常想在python中存储无序集合.itertools.groubpy做正确的事情,但几乎总是需要按摩来先对物品进行分类,然后在消耗之前捕捉它们.

有没有快速的方法来通过标准的python模块或简单的python习惯来获得这种行为?

>>> bucket('thequickbrownfoxjumpsoverthelazydog', lambda x: x in 'aeiou')
{False: ['t', 'h', 'q', 'c', 'k', 'b', 'r', 'w', 'n', 'f', 'x', 'j', 'm', 'p',
    's', 'v', 'r', 't', 'h', 'l', 'z', 'y', 'd', 'g'],
 True: ['e', 'u', 'i', 'o', 'o', 'u', 'o', 'e', 'e', 'a', 'o']}
>>> bucket(xrange(21), lambda x: x % 10)
{0: [0, 10, 20],
 1: [1, 11],
 2: [2, 12],
 3: [3, 13],
 4: [4, 14],
 5: [5, 15],
 6: [6, 16],
 7: [7, 17], …
Run Code Online (Sandbox Code Playgroud)

python

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

列表按谓词拆分

是否有更简洁的方法将谓词拆分为两个列表?

errors, okays = [], []
for r in results:
    if success_condition(r):
        okays.append(r)
    else:
        errors.append(r)
Run Code Online (Sandbox Code Playgroud)

据我所知,这可以变成丑陋的单行使用reduce; 这不是我想要的.

更新:success_condition每个元素只计算一次是可取的.

python

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

python相当于scala分区

我目前正在将一些Scala代码移植到Python中,我想知道什么是最类似于Scala的pythonic方法partition?特别是,在Scala代码中我有一种情况,我根据是否从我传入的某个过滤谓词返回true或false来分区项目列表:

val (inGroup,outGroup) = items.partition(filter)
Run Code Online (Sandbox Code Playgroud)

在Python中做这样的事情的最佳方法是什么?

python scala

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

通过谓词将列表过滤为两部分

我想要做

(filter-list-into-two-parts #'evenp '(1 2 3 4 5))
; => ((2 4) (1 3 5))
Run Code Online (Sandbox Code Playgroud)

其中列表被拆分为两个子列表,具体取决于谓词的计算结果是否为true.定义这样的函数很容易:

(defun filter-list-into-two-parts (predicate list)
  (list (remove-if-not predicate list) (remove-if predicate list)))
Run Code Online (Sandbox Code Playgroud)

但是我想知道Lisp中是否有内置函数可以做到这一点,或者更好的方法是编写这个函数?

lisp common-lisp filter

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

是否可以从理解中将结果编译成唯一列表?

上下文将整数列表拆分为它们自己的偶数和奇数列表.

    even = []
    odd = []
    for i in my_list:
        if i % 2 == 0:
            even.append(i)
        else:
            odd.append(i)
Run Code Online (Sandbox Code Playgroud)

有没有办法把上面变成一个漂亮,紧凑的列表理解...?

python

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

python 列表推导式中的 if-else

是否可以为以下 python 代码编写列表推导式:

for str in range(0,len(mixed_content)):
    if (mixed_content[str].isdigit()):
        num_list.append(mixed_content[str])
    else:
        string_list.append(mixed_content[str])
Run Code Online (Sandbox Code Playgroud)

我们可以在列表推导式中使用 else 块吗?我尝试为上述代码编写列表推导式:

num_list , string_list = [   mixed_content[str]  for str in range(0,len(mixed_content)) if(mixed_content[str].isdigit()) else ]
Run Code Online (Sandbox Code Playgroud)

python list-comprehension python-2.7 python-3.x

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

以下代码中使用'或'关键字有什么用?

我无法理解or以下代码中的关键字的使用,该代码取自本网站答案,该答案显示了使用reduce以下方法对列表进行分区的方法:

 def partition(l, p):
     return reduce(lambda x, y: x[not p(y)].append(y) or x, l, ([], []))
Run Code Online (Sandbox Code Playgroud)

我知道如果条件为真,代码将附加到第一个列表,否则它将附加到第二个列表.这部分or x做什么?我试着把它留下来,但我最后说错了TypeError: 'NoneType' object is not subscriptable

python reduce

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

Python,基于x的拆分坐标列表

我有一个坐标列表,我需要根据它们的x值将它们分成两半.像这样的东西:

l = [(0, 0), (1, 0), (2, 0), (3, 0), (0, 1), (1, 1), (2, 1), (3, 1)]
left = []
right = []
for i in l:
    if i[0] < 2:
        left.append(i)
    else:
        right.append(i)

print(left)
print(right)
Run Code Online (Sandbox Code Playgroud)

输出:

[(0, 0), (1, 0), (0, 1), (1, 1)]
[(2, 0), (3, 0), (2, 1), (3, 1)]
Run Code Online (Sandbox Code Playgroud)

有更快的方法吗?

python list

0
推荐指数
1
解决办法
994
查看次数