Py学习  »  Python

如何在python中提取和搜索字符串中的重复数字?

Sedric Hibler • 2 年前 • 965 次点击  

我正在使用itertools。组合和相互作用。产品将一些数据组合成一个数据框。为了保留一些数值(“FightNum”),我将这些数字转换为列表,然后转换为字符串。

这会在我的dataframe行中生成如下数据:
sample data

理想情况下,我想做的是,我想从这一行中提取数字,并检查6个数字中是否有任何一个是重复的。由于这些行(2个字符串列表)的结构,我不确定如何从这个字符串中提取数字,然后检查每个单元格中是否有重复的数字?

例如,如果一个数据帧单元具有以下值,我想将其标记为具有重复项:

["['1', '3', '4']", "['1', '3', '10']"]

这是因为1和3都会出现两次,而不是在这个字符串中有6个唯一的数字。

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/129273
 
965 次点击  
文章 [ 3 ]  |  最新文章 2 年前
user15801675 user15801675
Reply   •   1 楼
user15801675 user15801675    3 年前

你可以试试这个:

import ast
from collections import Counter
import itertools
x=["['1', '3', '4']", "['1', '3', '10']"]

y=list(itertools.chain.from_iterable([ast.literal_eval(m) for m in x]))
z=dict(Counter(y))
m=list(set(y))
print(z,m)

印刷品

{'1': 2, '3': 2, '4': 1, '10': 1} ['3', '1', '4', '10']
Unnamed
Reply   •   2 楼
Unnamed    3 年前

这段代码应该返回你想要的

string_list = [['1', '3', '4'], ['1', '3', '10']]

numbers = {}
for list in string_list:
    for item in list:

        if item not in numbers:
            numbers[item] = 1
        else:
            numbers[item] += 1

print(numbers)

这就回来了

{'1': 2, '3': 2, '4': 1, '10': 1}

这意味着有2个1,2个3,1个数字'4'和1个数字'10'。因此,存在重复。

如果您不想知道有多少个副本,可以运行:

string_list = [['1', '3', '4'], ['1', '3', '10']]

numbers = []
duplicates = False
for list in string_list:
    for item in list:

        if item not in numbers:
            numbers.append(item)
        else:
            duplicates = True
    if duplicates:
        break
    
print('There are duplicates' if duplicates else 'There are no duplicates')

这又回来了

There are duplicates

如果将字符串列表更改为['1',3',2',['5',8',10']],它将返回

There are no duplicates
Abhijit Sarkar
Reply   •   3 楼
Abhijit Sarkar    3 年前

又短又甜。

import re

text = """['1', '3', '4']", "['1', '3', '10']"""
nums = set(re.findall("\d+", text))

如果 len(nums) < 6 ,扔掉它。我假设数字是一致的,即。 1 不会同时显示为 1. 01 .如果是这样的话,你可以很容易地创建一组整数而不是字符串;我把它留给你做练习。