我有一个列表名为users,我想要第二个列表名为account_no,只包含users内容的第一部分.

users = [
    'GB1520*Adam Johnson*07293105657',
    'ZA5584*Dean Davids*07945671883'
]

account_no = []

def find_accountno():
    for index in range(len(users)):
        # I want to take the first 6 characters of users[index]
        acc = users[index: 6]           
        account_no.append(acc)

print(users)
find_accountno()
print(account_no)

这是期望的输出:

['GB1520', 'ZA5584']

但是,我得到的是:

[['GB1520*Adam Johnson*07293105657', 'ZA5584*Dean Davids*07945671883'], ['ZA5584*Dean Davids*07945671883']]

推荐答案

你应该多读一点关于slicing的书;你会发现它不像你想象的那样工作.

你写道:

acc = users[index: 6] 

This is saying "take every element in users from index index to index 6 (including index, not including 6), form a new list from them, and put them in acc".
For example:

l = [0,1,2]
b = l[0:2]

将列表[0,1]放入b.

如果您想要获取users[index]的前六个字符,那么您只需要users[index][0:6](因此users[index]是您希望切片的字符串;然后[0:6]采用如上所述的切片,只获取前6个元素:0到5).你也可以放弃0(也就是[:6]).

Some extras:
Another two solutions, just to show you some fun alternatives (these use what's known as list comprehension):

def find_accountno_alt1():
    numbers = [user[:6] for user in users]
    account_no.extend(numbers)

def find_accountno_alt2():
    numbers = [user.split('*')[0] for user in users]
    account_no.extend(numbers)

另一点:我个人建议将列表(account_no)作为参数传递,以使方法更整洁、更独立.

Python相关问答推荐

Pandas基于另一列的价值的新列

如何使用关键参数按列对Pandas rame进行排序

使用Curses for Python保存和恢复终端窗口内容

如何将不同长度的新列添加到现有的框架中

如何判断LazyFrame是否为空?

单击Python中的复选框后抓取数据

"如果发生特定错误,返回值

基本链合同的地址是如何计算的?

Pandas 除以一列中出现的每个值

如果索引不存在,pandas系列将通过索引获取值,并填充值

如何处理嵌套的SON?

Python Hashicorp Vault库hvac创建新的秘密版本,但从先前版本中删除了密钥

对某些列的总数进行民意调查,但不单独列出每列

将输入管道传输到正在运行的Python脚本中

在Polars(Python库)中将二进制转换为具有非UTF-8字符的字符串变量

在线条上绘制表面

把一个pandas文件夹从juyter笔记本放到堆栈溢出问题中的最快方法?

pandas在第1列的id,第2列的标题,第3列的值,第3列的值?

如何使用SentenceTransformers创建矢量嵌入?

LocaleError:模块keras._' tf_keras. keras没有属性__internal_'''