python 比较列表内字符串是不是相等?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python 比较列表内字符串是不是相等?相关的知识,希望对你有一定的参考价值。

for index, row in jmd_tiqu.iterrows():
for index_,row_ in point.iterrows():
if row_['NAME'].str.contains(str.jmd_tiqu.iloc[index]['jmd_name']):
jmd_tiqu[index, 'ROAD_DIST'] = row_['ROAD_DIST']
jmd_tiqu[index, 'RAIL_DIST'] = row_['RAIL_DIST']
jmd_tiqu[index, 'RIVER_DIST'] = row_['RIVER_DIST']
jmd_tiqu[index, 'LAKE_DISTT'] = row_['LAKE_DISTT']
为什么报错'str' object has no attribute 'str'?
jmd_tiqu 存储.shp数据
point 存储excel 数据

参考技术A 要使用contains方法,直接在后面跟就可以了,加个str当然会报错
---不好意思,看了一下,python应该没有contains这个方法
可以使用find()代替
注意不要写成s.str.find(),s.find()就行了
参考技术B 用的是哪个库?str这种方法多见于pandas里

如何在一个循环中比较两个列表的值是不是相等?

【中文标题】如何在一个循环中比较两个列表的值是不是相等?【英文标题】:How can I compare for equality the values of two lists in one loop?如何在一个循环中比较两个列表的值是否相等? 【发布时间】:2013-05-16 17:22:58 【问题描述】:

所以我想这样做,以便检查其他代码是否正常工作,但我不断收到此错误:

'list index out of range'

对于以下代码:

for L1[i] in range(0, len(L1)):
    if L1[i]==L2[i]:
        L1[i]='ok'

出了什么问题?

【问题讨论】:

也许你应该试试for i in range(... 而不是L1[i] in range 这是什么语言? 两个列表“相等”是什么意思? 【参考方案1】:

您可能正在寻找类似的东西。我建议预先验证您的列表长度是否相等,这样您的循环就不会失败。

assert len(L1) == len(L2)

for i in range(len(L1)):
    if L1[i] == L2[i]:
        L1[i] = 'ok'

或者,如果您的列表具有不同的长度是可以接受的,只需将两个长度中的最小值作为您的唯一上限。

upper_bound = min(len(L1), len(L2))
for i in range(upper_bound):

【讨论】:

【参考方案2】:

怎么样:

import itertools
zipped_pairs = itertools.izip_longest(L1, L2, fillvalue=object()) # generator of pairs (L1[n],L2[n])
equals_tests = (a == b for a,b in zipped_pairs) # perform equality test on each pair
all_equal = all(equals_tests) # True if all of the equals_tests items are True

或者在一行中:

all((a == b for a,b in itertools.izip_longest(L1, L2, fillvalue=object()))

请注意,只要 L1 和 L2 的长度不同,这最终将返回 false。如果您想要其他内容,请更改equals_tests 步骤以使用您喜欢的测试。您可能还需要为izip_longest 使用不同的fillvalue 参数。

事实上,这里有一个版本,它将一个空的地方视为等同于任何东西:

nonce = object()
all(((a == b) or (nonce in (a,b)) for a,b in itertools.izip_longest(L1, L2, fillvalue=nonce))

【讨论】:

是的,这可能是一个更好的主意【参考方案3】:

假设这是Python,有两个问题:

    您只想在for-循环的开头指定iL2 可能没有L1 那么多项目。

for i in range(0, len(L1)):
    try:
        if L1[i] == L2[i]:
            L1[i] = 'ok'
    except IndexError:
        break

正如 Frederik 指出的那样,您也可以使用 enumerate

for i, l1 in enumerate(L1):
    try:
        if L[i] == L2[i]:
            L1[i] = 'ok'
    except:
        break

在我看来,enumerate 相对于range 可读性的提高主要是通过定义一个您从不使用的额外变量 (l1) 来抵消的。但这只是我的意见。


最后一个可能是最好的选择是使用zip 合并两个列表(zip 截断两者中较长的一个):

for i, l1, l2 in enumerate( zip(L1, L2) ):
    if l1 == l2:
        L1[i] = 'ok'

【讨论】:

enumerate 只是添加了不必要的代码层,因为无论如何都需要分配给L1[i]

以上是关于python 比较列表内字符串是不是相等?的主要内容,如果未能解决你的问题,请参考以下文章

Python:比较两个字符串是不是相等或包含

Python:比较两个json串是不是相等,是直接把它当成字符串来比较呢?还是json.loads(),转化一下再比较

检查两个排序的字符串在 O(log n) 时间内是不是相等

Python比较字典形式的列表是不是部分相等

Java中怎么比较两个字符串是不是相等?

JAVA比较两个字符串是不是相等用啥