假设我有 2 个列表:
L1 = [2,4,1,6]
L2 = [1,5,2,3]
Run Code Online (Sandbox Code Playgroud)
输出应该是一个新列表,其中包含根据 L1 或 L2 的位置找到的最大数字。
示例输出:
L3 = [2, 5, 2, 6]
Run Code Online (Sandbox Code Playgroud)
怎么做 ?
据我所知,一个列表参数map()可以被列表推导所取代.例如
map(lambda x : x**2, range(5))
Run Code Online (Sandbox Code Playgroud)
可以替换为
[x**2 for x in range(5)]
Run Code Online (Sandbox Code Playgroud)
现在,我将如何为两个并行列表执行类似的操作.换句话说,我有一行代码具有以下模式:
map(func, xs, ys)
Run Code Online (Sandbox Code Playgroud)
其中func()有两个参数.
如何使用列表理解做同样的事情?
def get_plus(x,y):
return str(x) + y
seq_x = [1, 2, 3, 4]
seq_y = 'abc'
print([get_plus(x,y) for x in seq_x for y in seq_y])
#result // ['1a', '1b', '1c', '2a', '2b', '2c', '3a', '3b', '3c', '4a', '4b', '4c']
Run Code Online (Sandbox Code Playgroud)
但是,我想要这样的结果
#result // ['1a', '2b', '3c']
Run Code Online (Sandbox Code Playgroud)
我怎样才能做到这一点?
我的数据集由 a 组成LineString,我想过滤掉该 的各个线段LineString。更准确地说,是每一个街道段。
到目前为止,我已经从数据集中提取了各个点并将它们保存在单独的列表中。此外,我想再次收集这些点并从中创建单独的 LineStrings 以将它们存储到地理数据框中。数据具有以下形式:
LINESTRING (3275.284016199762 340555.8579582386, 3241.504528076811 340504.1348617533, 3245.415803206172 340501.457084205, 3280.414559049542 340552.7138220053, 3285.19053022
Run Code Online (Sandbox Code Playgroud)
我的问题是我必须LineString为每次迭代创建并显式保存一个单独的。谁能帮我这个?有更好的方法吗?
from shapely.geometry import Point, LineString
#Loop over LineString and gather Points
c=[]
for i in range(0,end):
c.append(Point(route1.coords[i]))
iterator=len(c)
max=len(c)-1
#Loop to store LineStrings - got stuck here
for i in np.arange(0,iterator):
if i<max:
LineString([c[i], c[i+1]]).wkt
else:
break;
Run Code Online (Sandbox Code Playgroud)
输出应如下所示:
Linestring(Point A, Point B)
Linestring(Point B, Point C)
Linestring(Point C, Point D)
...
Linestring(Point Y, Point Z)
Run Code Online (Sandbox Code Playgroud) Stack Overflow 上有很多关于这个一般主题的问答,但它们要么质量很差(通常是初学者的调试问题暗示的),要么以其他方式错过了目标(通常是不够通用)。至少有两种极其常见的方法会使幼稚的代码出错,初学者从关于循环的规范中获益更多,而不是从将问题作为拼写错误或关于打印所需内容的规范中获益。所以这是我尝试将所有相关信息放在同一个地方。
假设我有一些简单的代码,可以对一个值进行计算x并将其分配给y:
y = x + 1
# Or it could be in a function:
def calc_y(an_x):
return an_x + 1
Run Code Online (Sandbox Code Playgroud)
现在我想重复计算 的许多可能值x。我知道for如果我已经有要使用的值列表(或其他序列),我可以使用循环:
xs = [1, 3, 5]
for x in xs:
y = x + 1
Run Code Online (Sandbox Code Playgroud)
while或者,如果有其他逻辑来计算值序列,我可以使用循环x:
def next_collatz(value):
if value % 2 == 0:
return value // 2
else:
return 3 * value + 1
def collatz_from_19():
x = 19
while x != 1:
x …Run Code Online (Sandbox Code Playgroud) 假设我有两个不同大小的列表
a = [1, 2, 3]
b = ['a', 'b']
Run Code Online (Sandbox Code Playgroud)
什么是Pythonic方法来获取c一个元素a和一个元素的所有可能组合的元组列表b?
>>> print c
[(1, 'a'), (1, 'b'), (2, 'a'), (2, 'b'), (3, 'a'), (3, 'b')]
Run Code Online (Sandbox Code Playgroud)
元素的顺序c无关紧要.
具有两个for循环的解决方案是微不足道的,但它似乎并不特别是Pythonic.
我正在尝试比较两个不同字符串的第一个字符(依此类推),以根据这些结果形成一个新字符串.这是我尝试过的,但它将每个列表的每个元素相互比较.
def compare(a,b):
s = ""
for x in a:
for y in b:
if x == y:
s+=str(x)
else:
s+=str(y)
Run Code Online (Sandbox Code Playgroud)
这似乎是一个简单的问题,但我被卡住了.
假设我有一个这样的列表:
[1, 2, 3, 4]
Run Code Online (Sandbox Code Playgroud)
以及这样的函数列表:
[a, b, c, d]
Run Code Online (Sandbox Code Playgroud)
有没有一种简单的方法来获得这个输出?有类似的东西zip,但功能和参数?
[a(1), b(2), c(3), d(4)]
Run Code Online (Sandbox Code Playgroud) 是否有可能使用列表推导来迭代两个变量同时增加两个循环的位置.见下面的例子:
a = [1,2,3,4,5]
b = [6,7,8,9,10]
c = [i+j for i in a for j in b] # This works but the output is not what it would be expected.
Run Code Online (Sandbox Code Playgroud)
预期输出是c = [7, 9, 11, 13, 15](来自b的第n个元素的第n个元素)
谢谢.
我有一个列表元组。元组中的每个列表都具有相同数量的元素。如何在 for 循环中迭代它
前任:
tupleList = ([1,2,3], ['label1', 'label2', 'label3'])
for (val, label) in <something>:
print val, label
Run Code Online (Sandbox Code Playgroud)
应该输出:
1, label1
2, label2
3, label3
Run Code Online (Sandbox Code Playgroud)
注意:这个元组列表可以包含两个以上的列表。
PS:对于那些选择此重复的人,请检查正确解决方案的响应。它不同于遍历两个单独的列表。