Concatenate different data types python

When trying to concatenate a string and a number in Python:

answer = 42
print['The answer to life is ' + answer]

You’ll receive one of the following errors:

# python2
TypeError: cannot concatenate 'str' and 'int' objects

# python3
TypeError: Can't convert 'int' object to str implicitly

Fortunately, there are several ways to concatenate different types.

Cast to string

One approach is to convert the non-string to a string:

answer = 42
print['The answer to life is ' + str[answer]]

Interpolation

Another approach is to use interpolation:

answer = 42
print['The answer to life is %d' % [answer]]

The %d in this example stands for digit.

String format

The format[] method is also useful:

answer = 42
print['The answer to life is {}'.format[answer]]

f-string

If you’re using Python 3.6 or greater, you can use f-string:

answer = 42
print[f'The answer to life is {answer}']


Please support this site and join our Discord!


The problem here is that the + operator has [at least] two different meanings in Python: for numeric types, it means "add the numbers together":

>>> 1 + 2
3
>>> 3.4 + 5.6
9.0

... and for sequence types, it means "concatenate the sequences":

>>> [1, 2, 3] + [4, 5, 6]
[1, 2, 3, 4, 5, 6]
>>> 'abc' + 'def'
'abcdef'

As a rule, Python doesn't implicitly convert objects from one type to another1 in order to make operations "make sense", because that would be confusing: for instance, you might think that '3' + 5 should mean '35', but someone else might think it should mean 8 or even '8'.

Similarly, Python won't let you concatenate two different types of sequence:

>>> [7, 8, 9] + 'ghi'
Traceback [most recent call last]:
  File "", line 1, in 
TypeError: can only concatenate list [not "str"] to list

Because of this, you need to do the conversion explicitly, whether what you want is concatenation or addition:

>>> 'Total: ' + str[123]
'Total: 123'
>>> int['456'] + 789
1245

However, there is a better way. Depending on which version of Python you use, there are three different kinds of string formatting available2, which not only allow you to avoid multiple + operations:

>>> things = 5
>>> 'You have %d things.' % things  # % interpolation
'You have 5 things.'
>>> 'You have {} things.'.format[things]  # str.format[]
'You have 5 things.'
>>> f'You have {things} things.'  # f-string [since Python 3.6]
'You have 5 things.'

... but also allow you to control how values are displayed:

>>> value = 5
>>> sq_root = value ** 0.5
>>> sq_root
2.23606797749979
>>> 'The square root of %d is %.2f [roughly].' % [value, sq_root]
'The square root of 5 is 2.24 [roughly].'
>>> 'The square root of {v} is {sr:.2f} [roughly].'.format[v=value, sr=sq_root]
'The square root of 5 is 2.24 [roughly].'
>>> f'The square root of {value} is {sq_root:.2f} [roughly].'
'The square root of 5 is 2.24 [roughly].'

Whether you use % interpolation, str.format[], or f-strings is up to you: % interpolation has been around the longest [and is familiar to people with a background in C], str.format[] is often more powerful, and f-strings are more powerful still [but available only in Python 3.6 and later].

Another alternative is to use the fact that if you give print multiple positional arguments, it will join their string representations together using the sep keyword argument [which defaults to ' ']:

>>> things = 5
>>> print['you have', things, 'things.']
you have 5 things.
>>> print['you have', things, 'things.', sep=' ... ']
you have ... 5 ... things.

... but that's usually not as flexible as using Python's built-in string formatting abilities.

1 Although it makes an exception for numeric types, where most people would agree on the 'right' thing to do:

>>> 1 + 2.3
3.3
>>> 4.5 + [5.6+7j]
[10.1+7j]

2 Actually four, but template strings are rarely used, and are somewhat awkward.

Other Resources:

  • Real Python: Splitting, Concatenating, and Joining Strings in Python
  • Python.org: string - Common string operations
  • python string concatenation with int site:stackoverflow.com

How do you concatenate a string and a variable in Python?

Use the + operator.
str1="Hello".
str2="World".
print ["String 1:",str1].
print ["String 2:",str2].
str=str1+str2..
print["Concatenated two different strings:",str].

How do you concatenate a string and integer in Python?

If you want to concatenate a string and a number, such as an integer int or a floating point float , convert the number to a string with str[] and then use the + operator or += operator.

Can you concatenate different data types?

You have to perform an explicit conversion if they are not the same data type. The following example is trying to concatenate a INT and a String together, you can see SQL cannot handle the different data types. The new CONCAT[] function does an implicit conversion to string for all items being concatenated together.

Can Python concatenate different data types?

Python supports string concatenation using the + operator. In most other programming languages, if we concatenate a string with an integer [or any other primitive data types], the language takes care of converting them to a string and then concatenates it.

Chủ Đề