我想知道是否有一条快捷方式可以在Python列表中列出一个简单的列表.
我可以在for循环中做到这一点,但也许有一些很酷的"单行"?我用reduce尝试了,但是我收到了一个错误.
码
l = [[1, 2, 3], [4, 5, 6], [7], [8, 9]]
reduce(lambda x, y: x.extend(y), l)
Run Code Online (Sandbox Code Playgroud)
错误信息
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 1, in <lambda>
AttributeError: 'NoneType' object has no attribute 'extend'
Run Code Online (Sandbox Code Playgroud) 在Python中,我可以找到连接两个列表的唯一方法是list.extend
修改第一个列表.是否有任何串联函数返回其结果而不修改其参数?
我试图理解是否有必要获取列表的内容并将其附加到另一个列表.
我通过循环函数创建了第一个列表,它将从文件中获取特定行并将它们保存在列表中.
然后使用第二个列表来保存这些行,并在另一个文件上开始一个新的循环.
我的想法是在for循环完成后获取列表,将其转储到第二个列表中,然后开始一个新的循环,将第一个列表的内容再次转储到第二个列表中但附加它,所以第二个列表将是在我的循环中创建的所有较小列表文件的总和.只有满足某些条件时才必须附加该列表.
它看起来像这样的东西:
# This is done for each log in my directory, i have a loop running
for logs in mydir:
for line in mylog:
#...if the conditions are met
list1.append(line)
for item in list1:
if "string" in item: #if somewhere in the list1 i have a match for a string
list2.append(list1) # append every line in list1 to list2
del list1 [:] # delete the content of the list1
break
else:
del list1 [:] # delete …
Run Code Online (Sandbox Code Playgroud) 如果你在Python 3.7中执行以下语句,它将(从我的测试)打印b
:
if None.__eq__("a"):
print("b")
Run Code Online (Sandbox Code Playgroud)
但是,None.__eq__("a")
评估为NotImplemented
.
当然,"a".__eq__("a")
评估True
和"b".__eq__("a")
评估False
.
我最初在测试函数的返回值时发现了这个,但在第二种情况下没有返回任何内容 - 因此,函数返回了None
.
这里发生了什么?
在使用Python编程时,是否可以为将填充已知数量的项目的列表保留内存,以便在构建列表时不会多次重新分配列表?我查看了文档中的Python列表类型,但没有找到任何似乎这样做的东西.但是,这种类型的列表构建显示在我的代码的几个热点中,所以我想尽可能高效.
编辑:另外,用像Python这样的语言做这样的事情是否有意义?我是一个相当有经验的程序员,但是对Python很陌生并且仍然对它的做事方式有所了解.Python是否在内部将所有对象分配到单独的堆空间中,从而无法尝试最小化分配,或者是直接存储在列表中的诸如整数,浮点数等原语?
我正在编写一个Spark应用程序,并希望将一组键值对组合(K, V1), (K, V2), ..., (K, Vn)
成一个Key-Multivalue对(K, [V1, V2, ..., Vn])
.我觉得我应该能够使用reduceByKey
具有某种风味的功能来做到这一点:
My_KMV = My_KV.reduce(lambda a, b: a.append([b]))
Run Code Online (Sandbox Code Playgroud)
发生这种情况时我得到的错误是:
'NoneType'对象没有attribue'追加'.
我的键是整数,值V1,...,Vn是元组.我的目标是使用密钥和值列表(元组)创建一对.
鉴于,
list_1 = [1,2,3,4]
list_2 = [5,6,7,8]
Run Code Online (Sandbox Code Playgroud)
在python中实现以下功能的最快方法是什么?
list = [1,2,3,4,5,6,7,8]
Run Code Online (Sandbox Code Playgroud)
请注意,可以有很多方法在python中合并两个列表.我正在寻找最有效率的方式.
[编辑] ++++++++++++++++++++++++++++++++++++++++++++ [编辑]
感谢所有的答案.得到你的想法,我尝试了以下,这是我的理解.
码
import time
c = list(range(1,10000000))
c_n = list(range(10000000, 20000000))
start = time.time()
c = c+c_n
print len(c)
print time.time() - start
c = list(range(1,10000000))
start = time.time()
for i in c_n:
c.append(i)
print len(c)
print time.time() - start
c = list(range(1,10000000))
start = time.time()
c.extend(c_n)
print len(c)
print time.time() - start
Run Code Online (Sandbox Code Playgroud)
OUTPUT
19999999
0.125061035156
19999999
1.02858018875
19999999
0.03928399086
Run Code Online (Sandbox Code Playgroud)
所以,如果有人不打算在问题中重复使用list_1/list_2,那么延伸就是要走的路.另一方面, …
可能重复:
如何使用列表推导将元组元组转换为一维列表?
假设我有以下元组列表:
[(1,2), (1,3), (1,4), (1,5), (1,6)]
Run Code Online (Sandbox Code Playgroud)
我试图将它转换为一个简单的列表,如下所示:
[1,2,1,3,1,4,1,5,1,6]
Run Code Online (Sandbox Code Playgroud)
如何将其转换为如上所示的简单列表,而不必遍历每个元素并将项目逐个添加到另一个列表?
有没有快速有效的方法来实现这一点,而不是实际迭代原始的元组列表,还是有一些内置的函数/方法来做到这一点?
在JS我可以做到这一点
const a = [1,2,3,4]
const b = [10, ...a]
console.log(b) // [10,1,2,3,4]
Run Code Online (Sandbox Code Playgroud)
在python中有类似的方法吗?
快速简单的问题:
我如何合并这个.
[['a','b','c'],['d','e','f']]
Run Code Online (Sandbox Code Playgroud)
对此:
['a','b','c','d','e','f']
Run Code Online (Sandbox Code Playgroud) python ×10
list ×4
performance ×2
apache-spark ×1
arrays ×1
equivalence ×1
flatten ×1
mapreduce ×1
merge ×1
pyspark ×1
python-3.x ×1
rdd ×1
sequence ×1
string ×1