可能重复:
在Python中展平(不规则)列表
我无法使用python以递归方式展平列表.我已经看到了许多需要列表理解的方法和需要导入的各种方法但是我正在寻找一种非常基本的方法来递归地展平不使用任何for循环的不同深度的列表.我进行了一系列测试,但有两个我无法通过
flatten([[[[]]], [], [[]], [[], []]]) # empty multidimensional list
flatten([[1], [2, 3], [4, [5, [6, [7, [8]]]]]]) # multiple nested list
Run Code Online (Sandbox Code Playgroud)
我的代码
def flatten(test_list):
#define base case to exit recursive method
if len(test_list) == 0:
return []
elif isinstance(test_list,list) and type(test_list[0]) in [int,str]:
return [test_list[0]] + flatten(test_list[1:])
elif isinstance(test_list,list) and isinstance(test_list[0],list):
return test_list[0] + flatten(test_list[1:])
else:
return flatten(test_list[1:])
Run Code Online (Sandbox Code Playgroud)
我很感激一些建议.
类似的问题已经被问过,但这些解决方案不为我用的情况下工作(例如,制作一个平面列表出Python列表的列表和压扁浅列表在Python,我已经是一个字符串列表和列表,其中嵌入列表也可以包含字符串和列表.我想将其转换为一个简单的字符串列表,而不将字符串拆分为字符列表.
import itertools
list_of_menuitems = ['image10', ['image00', 'image01'], ['image02', ['image03', 'image04']]]
chain = itertools.chain(*list_of_menuitems)
Run Code Online (Sandbox Code Playgroud)
结果清单:
['i', 'm', 'a', 'g', 'e', '1', '0', 'image00', 'image01', 'image02', ['image03', 'image04']]
Run Code Online (Sandbox Code Playgroud)
预期结果:
['image10', 'image00', 'image01', 'image02', 'image03', 'image04']
Run Code Online (Sandbox Code Playgroud)
什么是最好的(Pythonic)方法呢?
在Python中,我们可以使用extend()方法将列表相互添加,但它会在第一个列表的末尾添加第二个列表。
lst1 = [1, 4, 5]
lst2 = [2, 3]
lst1.extend(lst2)
Output:
[1, 4, 5, 2, 3]
Run Code Online (Sandbox Code Playgroud)
如何将第二个列表添加到第一个元素之外?这样结果就是这样的;
[1, 2, 3, 4, 5 ]
Run Code Online (Sandbox Code Playgroud)
我尝试使用lst1.insert(1, *lst2)
并出现错误;
TypeError: insert expected 2 arguments, got 3
Run Code Online (Sandbox Code Playgroud) 我想将元组转换为以分号分隔的字符串.简单.
tup = (1,2)
';'.join(map(str,tup))
Run Code Online (Sandbox Code Playgroud)
输出:
'1;2'
Run Code Online (Sandbox Code Playgroud)
但是,如果其中一个元组条目本身就是一个元组,我会得到这样的结果:
'1;(2, 3)'
Run Code Online (Sandbox Code Playgroud)
我不想要那个逗号,我想要一个分号,而且我也想选择括号字符.
我要这个:
'1;{2;3}'
Run Code Online (Sandbox Code Playgroud)
有一种简单的方法来深加入嵌套到任意深度的元组的元组,同时指定分离器(;在本例中"")和(在上面的例子中"{"和"}")的parenthes?
请注意,我不想要这个,这个问题被标记为重复:
'1,2,3'
Run Code Online (Sandbox Code Playgroud)
我还需要处理带逗号的字符串,所以我不能使用replace
:
flatten((1,('2,3',4)))
'1;{2,3;4}'
Run Code Online (Sandbox Code Playgroud) 我尝试总结嵌套元素的列表
例如,数字= [1,3,5,6,[7,8]],总和= 30
我写了以下代码
def nested_sum(L):
sum=0
for i in range(len(L)):
if (len(L[i])>1):
sum=sum+nested_sum(L[i])
else:
sum=sum+L[i]
return sum
Run Code Online (Sandbox Code Playgroud)
上面的代码给出了以下错误:'int'类型的对象没有len()我也试过len([L [i]]),仍然无法正常工作
有人可以帮忙吗?顺便说一下,它是Python 3.3
我已经通过查找两个列表的交集?,的两个列表字符串路口,获取两个列表的交集的蟒蛇。但是,我无法解决使用 Python 查找两个字符串列表之间的交集的问题。
我有两个变量。
A = [['11@N3'], ['23@N0'], ['62@N0'], ['99@N0'], ['47@N7']]
B = [['23@N0'], ['12@N1']]
Run Code Online (Sandbox Code Playgroud)
如何找到 '23@N0' 是 A 和 B 的一部分?
我尝试使用http://www.saltycrane.com/blog/2008/01/how-to-find-intersection-and-union-of/ 中提到的 intersect(a,b) 但是,当我尝试转换 A进入集合,它抛出一个错误:
File "<stdin>", line 1, in <module> TypeError: unhashable type: 'list'
Run Code Online (Sandbox Code Playgroud)
要将其转换为集合,我使用了TypeError: unhashable type: 'list' when using built-in set function中的方法,其中列表可以使用转换
result = sorted(set(map(tuple, A)), reverse=True)
Run Code Online (Sandbox Code Playgroud)
成元组,然后元组可以转换成一个集合。但是,这会返回一个空集作为交集。
你能帮我找到路口吗?
我正在努力学习函数式编程概念.练习,使用map/reduce展平嵌套列表.我的代码.
lists = [ 1 , 2 , [ 3 , 4, 5], 6, [7, 8, 9] ]
def flatten(lists):
return map(lambda x: flatten(x) if isinstance(x,list) else x, lists)
print flatten(lists)
Run Code Online (Sandbox Code Playgroud)
我输出与输入相同.我做错了什么 ?递归如何与map()一起使用?
我正在尝试扁平化包含原始数据类型、列表和生成器的数十万个列表。列表和生成器都有原始数据类型,所以在展平之后我将只有原始数据类型(浮点数、整数、字符串和布尔值)
例子 :
list_1 = [1, 2, 3, 'ID45785', False, '', 2.85, [1, 2, 'ID85639', True, 1.8], (e for e in range(589, 591))]
Run Code Online (Sandbox Code Playgroud)
我的代码:
flatten = []
for item in list_1:
if isinstance(item, (str, bool, int, float)) :
flatten.append(item)
else:
flatten.extend(list(item))
Run Code Online (Sandbox Code Playgroud)
由于性能很重要,我想知道是否有更好的方法来实现扁平化?
我有一个图像,我试图使用skimage.PiecewiseAffineTransform
和来扭曲skimage.warp
。我有一组控制点 ( true
) 映射到一组新的控制点 ( ideal
),但扭曲没有返回我期望的结果。
在这个例子中,我有一个简单的波长梯度,我试图将其“拉直”成列。(您可能会问为什么我要查找轮廓和插值,但那是因为我实际上将此代码应用于更复杂的用例。我只是想重现这个简单示例的所有代码,这会导致相同的奇怪输出。)
为什么我的输出图像只是将输入图像扭曲成正方形和插图?我正在使用 Python 2.7.12 和 matplotlib 1.5.1。这是代码。
import matplotlib.pyplot as plt
import numpy as np
from skimage import measure, transform
true = np.array([range(i,i+10) for i in range(20)])
ideal = np.array([range(10)]*20)
# Find contours of ideal and true images and create list of control points for warp
true_control_pts = []
ideal_control_pts = []
for lam in ideal[0]:
try:
# Get the isowavelength contour in the true and ideal images …
Run Code Online (Sandbox Code Playgroud) 给定一个数据帧df
,(现实生活是+1000行df).元素ColB
是列表列表.
ColA ColB
0 'A' [['a','b','c'],['d','e','f']]
1 'B' [['f','g','h'],['i','j','k']]
2 'A' [['l','m','n'],['o','p','q']]
Run Code Online (Sandbox Code Playgroud)
如何ColC
使用不同列中的元素有效地创建一个字符串,如下所示:
ColC
'A>+a b:c,+d e:f'
'B>+f g:h,+i j:k'
'A>+l m:n,+o p:q'
Run Code Online (Sandbox Code Playgroud)
我尝试了df.apply
这些方法,灵感来自于:
df['ColC'] = df.apply(lambda x:'%s>' % (x['ColA']),axis=1)
Run Code Online (Sandbox Code Playgroud)
这适用于字符串的前2个元素.其余的都很难过.
python ×10
list ×6
python-3.x ×2
recursion ×2
string ×2
arrays ×1
dataframe ×1
dictionary ×1
generator ×1
intersection ×1
nested ×1
numpy ×1
pandas ×1
python-2.7 ×1
python-3.3 ×1
scikit-image ×1
set ×1